Django ModelForm实例,具有特定字段的自定义查询集

时间:2009-11-30 17:48:16

标签: django django-forms modelform

我的模型与以下内容不同:

class Bike(models.Model):
    made_at = models.ForeignKey(Factory)
    added_on = models.DateField(auto_add_now=True)

所有用户都可以在多个工厂工作,因此他们的用户个人资料都有ManyToManyFieldFactory

现在我想为ModelForm构建一个Bike,但我希望made_at列表只包含当前用户工作的工厂。我们的想法是,用户应该能够添加他们已组装的自行车,并进入自行车所在的工厂。

我该怎么做?

3 个答案:

答案 0 :(得分:40)

在视图中尝试这样的事情

form  = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)

修改Factory查询集,以便识别用户所在的工厂。

答案 1 :(得分:8)

您的问题可能是dupe of this

S. Lottanswer有解决问题的凭单。 他回答说:

  

ForeignKey由django.forms.ModelChoiceField表示,它是一个ChoiceField,其选择是模型QuerySet。请参阅ModelChoiceField的参考。

     

因此,请为字段的queryset属性提供QuerySet。取决于您的表单是如何构建的。如果您构建一个显式表单,则会直接命名。

     

form.rate.queryset = Rate.objects.filter(company_id=the_company.id)   如果您使用默认的ModelForm对象form.fields["rate"].queryset = ...

     

这在视图中明确完成。没有黑客攻击。

答案 2 :(得分:0)

现在,您应该使用:

    form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
        'alumno',
        'alumno__estudiante',
        'alumno__estudiante__profile',
        'item'
    )