我的模型与以下内容不同:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
所有用户都可以在多个工厂工作,因此他们的用户个人资料都有ManyToManyField
到Factory
。
现在我想为ModelForm
构建一个Bike
,但我希望made_at
列表只包含当前用户工作的工厂。我们的想法是,用户应该能够添加他们已组装的自行车,并进入自行车所在的工厂。
我该怎么做?
答案 0 :(得分:40)
在视图中尝试这样的事情
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
修改Factory查询集,以便识别用户所在的工厂。
答案 1 :(得分:8)
您的问题可能是dupe of this。
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'
)