2014-09-26 39 views
0

我有以下型号:如何在窗体上创建m2m字段的部分并在django中保存模型选择?

PROOF_TYPE_CHOICES =(('A','Address proof'), 
        ('P','PAN card'), 
        ) 

class DocProof(models.Model): 
    name = models.CharField(max_length=100,unique=True) 
    type = models.CharField(max_length=1,default='A', 
          choices=PROOF_TYPE_CHOICES 
          ) 

class Vendor(models.Model): 
    name = models.CharField(max_length=100) 
    doc_proofs = models.ManyToManyField(DocProof) 

我希望在供应商形式的不同部分,以显示不同类型的文件证据类型。例如:

class VendorForm(forms.ModelForm): 
    model = Vendor 
    # doc_proofs = forms.ModelMultipleChoiceField(
    # queryset=DocProof.objects.all().order_by('-type'), 
    # required=True, 
    # widget=forms.CheckboxSelectMultiple()) 

    address_proofs = forms.ModelMultipleChoiceField(
     queryset=DocProof.objects.filter(type='A').order_by('-type'), 
     required=True, 
     widget=forms.CheckboxSelectMultiple()) 

    pan_card = forms.ModelMultipleChoiceField(
     queryset=DocProof.objects.filter(type='P').order_by('-type'), 
     required=True, 
     widget=forms.CheckboxSelectMultiple()) 

这无疑使得中显示的供应商形成不同的部分,也不允许我保存的形式,因为它会引发错误,形式字段集不包括原来的“doc_proofs”。此外,如何在Vendor模型中保存这些选项,因为这些字段(address_proof,pan_card)不在其上,但仅在表单上。我如何映射它们/覆盖模型上的保存方法以将其保存为'doc_proofs'?通过创建重复关系,与不同的相关名称相同的供应商型号如下在供应商模型定义使用Django 1.6.5

回答

0

找到解决方案添加字段:

address_proofs = models.ManyToManyField(DocProof, 
             related_name='address_proofs') 
pan_card = models.ManyToManyField(DocProof, 
            related_name='pan_card') 

但是,什么是反复冲击关系与上述相同?