【发布时间】:2014-10-30 08:33:01
【问题描述】:
我想使用查询集过滤出现在表单的 M2M 字段中的选项。我读过limit_choices_to 只能与ForeignKey 一起使用。有没有类似limit_choices_to 的东西可以应用于M2M?
这是我的模型:
class Inspection(models.Model):
ref = models.CharField(max_length=50)
tools = models.CharField(max_length=150,null=True,blank=True)
areas = models.ManyToManyField('specimens.Area',null=True,blank=True)
这是M2M领域的模型:
class Area(models.Model):
ref = models.CharField(max_length=10)
description = models.TextField(max_length=150)
specimen = models.ForeignKey(Specimen)
class Meta:
unique_together = ['ref','specimen']
我想用查询集过滤inspection_areas:
Area.objects.filter(specimen="specimen")
其他帖子 (Many to many and how to get a queryset from queryset) 解释了这样做的方法,更改了我认为的管理表单(我不太了解),但这对我不起作用,出现 DoesNotExist 错误或 @987654330 @错误。我是否必须将我的InspectionForm 更改为之前发布帖子的InspectionAdminForm?
有什么想法吗?
EDIT-1:
我意识到它会引发其他不同的错误:
这是我用过的完整代码:
class InspectionAdminForm(forms.ModelForm):
class Meta:
model = Inspection
def __init__(self, *args, **kwargs):
super(InspectionAdminForm,self).__init__(*args,**kwargs)
self.fields['areas'].queryset = Area.objects.filter(specimen=self.instance.specimen)
class InspectionAdmin(admin.ModelAdmin):
form = InspectionAdminForm
filter_horizontal = ['areas']
【问题讨论】:
-
您在设置模型后是否执行了
makemigrations和migrate?看起来它不知道将您的数据放在哪里(也不知道从哪里获取)...... -
你是对的。我忘了迁移。解决了最新的错误。我现在没有任何错误,但查询集过滤器仅在我的管理员视图中有效,而在我的表单中,我仍然查看所有区域选项而不进行过滤。
标签: django django-queryset manytomanyfield