class Comment(models.Model):
user = models.ForeignKey(User)
document = models.ForeignKey(Document)
section = models.ForeignKey(Section, null=True, blank=True)
description = models.TextField(null=True, blank=True)
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ('section', 'description')
每个评论属于文档的一个部分。每份文件都有很多章节。但是,由Django打印出来的ModelChoiceField将包含所有文档的部分。
如何告诉Django只打印属于特定文档的章节?
我看了ModelFormSets - Changing the queryset,但我认为这不是我想要的。
答案 0 :(得分:2)
如果你需要做的只是调整管理站点,你可以覆盖django管理员类的formfield_for_foreignkey方法。
来自文档:
ModelAdmin.formfield_for_foreignkey(self,db_field,request,** kwargs)
ModelAdmin上的formfield_for_foreignkey方法允许您覆盖 外键字段的默认表单字段。例如,返回子集 对于此外键字段的对象,基于用户:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
kwargs["queryset"] = Car.objects.filter(owner=request.user)
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
这使用HttpRequest实例来过滤Car 外键字段仅显示User实例拥有的汽车。
答案 1 :(得分:1)
我认为您要更改ModelChoiceField's queryset而不是formset的查询集。