ModelChoiceField 和模板
Posted
技术标签:
【中文标题】ModelChoiceField 和模板【英文标题】:ModelChoiceField and templates 【发布时间】:2013-07-05 21:24:02 【问题描述】:我是 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】:从表单中隐藏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
【讨论】:
以上是关于ModelChoiceField 和模板的主要内容,如果未能解决你的问题,请参考以下文章
django ModelChoiceField:如何遍历模板中的实例?