Django inlineformset实例与queryset

时间:2016-07-20 00:10:34

标签: django django-forms

我一直在尝试处理Django inlineformsets。绊倒我的是尝试将查询集传递给formset构造函数。

考虑两个简单的模型。

class PickSheet(Model):
    name = Models.CharField()

class Pick(Model):
    picksheet = Models.ForeignKey(PickSheet, related_name='picks')
    team = Models.CharField()
    points = Models.CharField()

现在创建一个FormSet。

PickFormSet = inlineformset_factory(PickSheet, Pick, max_num=5, extra=0, fields=['team', 'points'])

在数据库中,我有一个使用两个Picks创建的PickSheet。

如果我在创建formset时使用instance =,我会得到预期的两种形式。

obj = get_object_or_404(PickSheet, id=3)
formset = PickFormSet(instance=obj)
print(formset.management_form)

如果我在创建formset时使用queryset =,我会得到零表单。

qs = PickSheet.objects.filter(id=3)
formset = PickFormSet(queryset=qs)
print(formset.management_form)

发生了什么事? PickSheet.objects.filter(id = 3)是否等同于PickSheet.objects.get(id = 3)?

1 个答案:

答案 0 :(得分:1)

PickSheet.objects.filter(id=3)不等同于PickSheet.objects.get(id=3),因为PickSheet.objects.filter(id=3)返回一个列表而PickSheet.objects.get(id=3)将返回一个对象实例。