2014-02-10 96 views
0

我試圖在基於模型的Django中創建表單。此表格必須包含基本上2個信息:有關所審閱產品的評論文本和標籤。 由於用戶界面的改進,數據庫中已有的標籤應顯示在窗體中,以幫助用戶作爲複選框。但是,如果他想要包含不在此列表中的另一個標籤,則可能。新標籤的字段是一個文本字段(插入的每個新標籤都用逗號分隔,我使用taggit來管理標籤)。的呈現標籤的數目是正在審查其通過產物而變化的隨機元素,但最小值爲0,最大值爲10。自定義表單中的字段

這是審查模型:

class Review(models.Model): 
    user = models.ForeignKey(User, related_name="user_blog") 
    tag = TaggableManager() 
    product = models.ForeignKey(Product) 
    review_text = models.TextField() 
    created = models.DateTimeField(auto_now=True, auto_now_add=False) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=True) 
    hashtag = models.ForeignKey(Hashtag) 

    def __unicode__(self): 
     return u'%s' % self.review_text 

    def getTags(prodid): 
     return Review.objects.filter(product=prodid) 

這是形式I創建:

<form class="form-inline"> 
<strong><h3>Revise este produto</h3></strong><br> 

{% for tag in tags %} 
<label class="checkbox"> 
<input type="checkbox" value=""> #Ótimo 
</label> 
{% endfor %} 

<br/> 
<p>&nbsp;</p> 
<label>Envie outras hashtags</label> <br/> 
<input type="text" class="span3" placeholder="exemplo1, exemplo2"> 
<br /> 
<p>&nbsp;</p> 
<label>Deixe sua opinião (opcional)</label> <br/> 
<textarea name="Text1" cols="80" class="span3" rows="5" placeholder="Digite sua opinião aqui"></textarea> 
<br/> 
<p>&nbsp;</p> 
<button class="btn btn-primary" type="submit"><h4>Pronto!</h4></button> 
</form> 

我瞭解Django的形式,這聽起來讓很多容易實現的形式,但我不知道如何自定義標籤領域,如我直接在這裏做的HTML,無論怎麼改字段的標籤(因爲標籤應該是葡萄牙語,所有的服務器端都是英文的)。

我試圖實現一個forms.py,但「review_text」的標籤沒有改變,正如我之前所說的,我不知道如何顯示錶單中已經存在於數據庫中的所有標籤,然後用戶將所有選中的框組合在一起,並與新標籤字段連接並將其保存在數據庫中。

from django import forms 
from django.forms import models 
from models import Review 
from django.utils.safestring import mark_safe 
from django.forms import ModelForm 

class ReviewForm(ModelForm): 
     class Meta: 
       model = Review   
       fields = ('review_text','tag') 

     review_text = forms.CharField(widget = forms.Textarea, label='teste label') 

這是我爲這個頁面視圖:

def single_product(request, slug): 
    product = get_object_or_404(Product, slug=slug) 
    prod = Product.objects.get(slug=slug) 
    reviews = Review.objects.get(product=prod.id) 
    reviewmatrix = {} 
    i = 0 
    try: 
     for rev in reviews: 
      reviewmatrix[str(i)] = [[review.review_text]] 
      u = User.objects.get(username=rev.user) 
      i = i + 1 
    except: 
     u = User.objects.get(username=reviews.user) 
     reviewmatrix[str(i)] = [[reviews.review_text]] 

    if request.method=="POST": 
     form = responseForm(request.POST, review=review) 
     if form.is_valid(): 
      response = form.save() 
      msg = 'Obrigado por avaliar ' + prod.name 
     return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'msg':msg})  
    else:  
     form = ReviewForm()  
     args = {} 
     args.update(csrf(request)) 
    return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'form':form}) 

回答