2

我是 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 }} 效果很好,但我需要隐藏作者字段(作者 - 登录用户)。

4

1 回答 1

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 }}

于 2013-07-08T14:02:16.570 回答