我是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}}它运行良好,但我需要隐藏作者字段(作者 - 登录用户)。
答案 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 }}