Django ModelChoiceField 的问题
Posted
技术标签:
【中文标题】Django ModelChoiceField 的问题【英文标题】:Trouble with Django ModelChoiceField 【发布时间】:2014-04-29 16:24:21 【问题描述】:关于在我正在构建的表单中使用 django 的 modelchoicefield 的初学者问题。
我只需要让 django 在表单中显示成分的下拉列表。我已经到了页面呈现但表单没有呈现的地步,我之前遇到过错误,所以我现在有点困惑。我希望得到一些指导。
使用 python 2.7.6 和 django 1.6.2。如果我遗漏了什么,请告诉我。
谢谢!
代码如下:
观看次数:
args =
#add csrf sercurity
args.update(csrf(request))
args['form'] = form
return render_to_response('newMeal.html', args)
表格:
从 django 导入表单 从模型中导入膳食、配料、食谱
类mealForm(forms.ModelForm):
breakfast = forms.ModelChoiceField(queryset=recipe.objects.all())
# Lunch = forms.ModelChoiceField(queryset=recipe.objects.all())
# Dinner = forms.ModelChoiceField(queryset=recipe.objects.all())
class Meta:
model = meals
fields = ('Breakfast','Lunch','Dinner','servingDate')
class recipeForm(forms.ModelForm):
class Meta:
model = recipe
fields = ('Name', 'Directions')
模板:
% extends "base.html" %
% block content %
<p>New Meals go here!</p>
<form action="/meals/newmeal/" method="post">% csrf_token %
<table class="selection">
form.as_table
<tr><td colspan="2"><input type="submit" name="submit" value="Add Meal"></td></tr>
</table>
</form>
% endblock %
型号;
从 django.db 导入模型 导入日期时间
在这里创建您的模型。
类配方(models.Model):
Name = models.CharField(max_length=200)
Directions = models.TextField()
pub_date = models.DateTimeField(auto_now_add = True)
def __unicode__(self):
return (self.id, self.Name)
类成分(models.Model):
Name = models.CharField(max_length=200)
Quantity = models.IntegerField(default=0)
Units = models.CharField(max_length=10)
Recipe = models.ForeignKey(recipe)
def __unicode__(self):
return self.Name
上课餐(models.Model):
Breakfast = models.CharField(max_length=200)
Lunch = models.CharField(max_length=200)
Dinner = models.CharField(max_length=200)
servingDate = models.DateTimeField('date published')
【问题讨论】:
你遇到了什么错误? 我收到错误 200 在这种情况下,我没有收到错误消息。这很奇怪,当我检查呈现的页面源时,表单在那里,但只有开始和结束标签,没有内容。认为我只是在滥用 ModelChoiceField。 粘贴你的models.py
,因为你有一些基本问题,但我想确保你的模型没有任何问题:)
将模型添加到我的原始帖子中。希望对您有所帮助。
【参考方案1】:
你导入了mealForm
:
类似:from app.forms import mealForm
form 是一个函数。所以试试:
args['form'] = mealForm()
注意:不要使用render_to_response
。它是旧的使用 render
代替(所以甚至不需要 csrf)::
from django.shortcuts import render
def...(request):
....
return render(request,'newMeal.html', 'form': mealForm())
【讨论】:
感谢 pro-tip re render_to_response。我仔细检查了,我正在导入表单,我得到了同样的结果,页面呈现但没有内容。如果我从表单中删除 ModelChoiceField ,一切都会变得很花哨。我将整个 form.py 代码添加到我的原始帖子中,我确定这是我犯的一些奇怪的菜鸟错误。以上是关于Django ModelChoiceField 的问题的主要内容,如果未能解决你的问题,请参考以下文章
Django - ModelChoiceField 查询集如何工作?
表单 ModelChoiceField 查询集 + 额外选择字段 django 表单
Django:让 ModelChoiceField 在运行时评估查询集