我对Django比较陌生,所以希望这是一个很简单的问题。我发现调试很困难,也许这就是我的问题所在。
**问题:**Django表单似乎没有填充帖子数据。
**摘要:**我有2个模型 * 实体 * 和 * 分段 。 分段 * 与 * 实体 * 模型上的 entity_id(不是PK)具有FK关系。
我想为 Breaks 的所有字段生成一个空表单。生成基本表单会填充所有空字段,但对于FK,它会生成一个 Entities 表的所有PK的下拉列表。这没有帮助,因此我已在下面的ModelForm中将其排除,并尝试替换为 Entities 表的所有entity_ids的列表。此表单按预期呈现。
class BreakForm(ModelForm):
class Meta:
model = Breaks
#fields = '__all__'
exclude = ('entity',)
def __init__(self, *args, **kwargs):
super(BreakForm, self).__init__(*args, **kwargs)
self.fields['entity_id'] = ModelChoiceField(queryset=Entities.objects.all().values_list('entity_id', flat=True))
下面的FormView是URL调用的cbv。如下所示,如果我填充表单,并为FK列entity_id选择其中一个值,则表单将不会提交。表单模板上的该字段旁将显示以下消息 * 请选择有效选项。该选项不是可用选项之一 *。
class ContactFormView(FormView):
template_name = "breaks/test/breaks_form.html"
form_class = BreakForm
我最初的想法是这个字段的数据类型(string/integer)是错误的,或者Django需要 Entities 表中行的PK(不管什么原因)。
所以我在FormView中添加了一个post函数,可以看到request.body被正确地填充,但是我无法解决如何将其填充到ModelForm中并保存到数据库中,或者克服上面提到的问题。
任何帮助都将不胜感激
2条答案
按热度按时间hec6srdp1#
在Django中,作为参数传递给视图的request对象有一个名为“method”的属性,其中设置了请求的类型,所有通过POST传递的数据都可以通过request.POST字典访问。视图将显示通过loggedin.html发布的登录表单的结果。
rryofs0p2#
我认为您的问题有两个方面,第一个是下拉列表没有正确显示,第二个是表单没有保存。对于第一个问题,您不需要对
ModelChoiceField
查询集做任何更改,而是添加to_field_name
:其次,如果要保存窗体,请使用CreateView而不是FormView: