我有一个专门用于定义两个模型之间的m2m关系的模板。每个模型实例可能有数百m2m的关系。
models.py
class Treatment(models.Model):
category = CharField()
...
class Doctor(models.Model):
treatment = ManyToManyField(Treatment, blank=True)
在表单中,我定义了m2m字段的复选框列表
forms.py
class TreatCheckbox(forms.ModelForm):
treatment = forms.ModelMultipleChoiceField(queryset=Treatment.objects.all(),required=False, widget=forms.CheckboxSelectMultiple)
class Meta:
model = Doctor
fields = ('treatment',)
-
views.py
def set_relations(request, pk):
context={}
context['doctor'] = Doctor.objects.get(id=pk)
if request.POST:
form_treat = TreatCheckbox(request.POST, instance=context['doctor'])
if form_treat.is_valid():
#form_treat.save()
return HttpResponseRedirect(request.path)
else:
form_treat = TreatCheckbox(instance = context['doctor'])
form_treat.fields["treatment"].queryset = Treatment.objects.filter(category = 'dentistry')
分配给表单的查询集将选项缩减为子集(category ='dentistry')。 如果我使用表单,则只保存表单中的选定关系,但数据模型将丢失所有不可见的集合关系。似乎save()加载 - 替换m2m字段。
我希望我的观点只能改变所显示的关系。我怎么能以聪明的方式做到这一点?