我想使用查詢集過濾出現在表單的M2M字段中的選項。我讀過limit_choices_to
只能用於ForeignKey。是否有類似limit_choices_to
可以應用於M2M?使用queryset過濾django 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
錯誤或Super
錯誤。我是否必須更改我的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'嗎?它看起來不知道把數據放在哪裏(也不能從中獲取)...... – mccc 2014-10-30 08:49:16
你是對的。我忘記了遷移。解決了最新的錯誤。我現在沒有任何錯誤,但查詢集過濾器只能在我的管理視圖中使用,而在我的表單中,我仍然可以查看所有區域選項而不進行過濾。 – DavidRguez 2014-10-30 08:55:35