ModelChoiceField和模板

时间:2013-07-08 13:53:26

标签: django templates model field choice

我是django的新手。我有这样的模特:

class Category(models.Model):
    category = models.CharField(max_length=20)

    def __unicode__(self):
        return self.category

class Tag(models.Model):
    tag = models.CharField(max_length=30, blank=True)


    def __unicode__(self):
        return self.tag

class News(models.Model):
    title = models.CharField(max_length=80)
    category = models.ForeignKey(Category)
    author = models.ForeignKey(User)
    news_body = models.CharField(max_length=5000)
    pub_date = models.DateField(default = datetime.datetime.now())
    tags = models.ManyToManyField(Tag, blank=True)

    def __unicode__(self):
        return self.title

并表示,添加新闻:

class AddNewsForm(ModelForm):
    class Meta():
        model = News

模板中的ModelChoiceField表示有问题。 我想要使​​用<select>/<option>标签,如下所示:

<select id="id_category" name="category">
<option value="" selected="selected">---------</option>
{% for cat in form.category  %}
<option>{{cat}}</option>
{% endfor %}
</select>

但它不起作用。如何获得类别字段选择(迭代它们)。这是一个简单的问题,但我很困惑,无法找到有效的解决方案。

使用{{form.as_p}}它运行良好,但我需要隐藏作者字段(作者 - 登录用户)。

1 个答案:

答案 0 :(得分:1)

从表单中隐藏author的更简洁方法是

class AddNewsForm(ModelForm):
    class Meta:
        model = News
        exclude = ('author', )

并在视图中:

@login_required
def myView(request):
    #some code here
    if request.POST:
        form = AddNewsForm(request.POST)
        if form.is_valid():
            news = form.save(commit=False)
            news.author = request.user
            news.save()

     #rest of the code

让模板加载默认方式{{ form.as_p }}