Django:表单应该只编辑多对多关系的子集

时间:2015-11-30 16:44:21

标签: django django-models django-forms django-views

我有一个专门用于定义两个模型之间的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字段。

我希望我的观点只能改变所显示的关系。我怎么能以聪明的方式做到这一点?

0 个答案:

没有答案