如何更新包含m2m字段django的模型?

如何更新包含m2m字段django的模型?,django,django-forms,manytomanyfield,updatemodel,Django,Django Forms,Manytomanyfield,Updatemodel,我有下面的模型,我从中创建了一个ModelForm。 我加入了save_m2m,因为在提交表单时它没有保存多对多字段。 我还使用了两种不同的视图来创建或更新,因为我认为这是导致创建新记录的原因 但是,它不更新实例,而是创建一个新实例。 那么,如何编辑包含多对多字段的模型数据呢 型号.py class GeneralContract(models.Model): idcontract = models.IntegerField(primary_key=True) client=m

我有下面的模型,我从中创建了一个ModelForm。 我加入了save_m2m,因为在提交表单时它没有保存多对多字段。 我还使用了两种不同的视图来创建或更新,因为我认为这是导致创建新记录的原因

但是,它不更新实例,而是创建一个新实例。 那么,如何编辑包含多对多字段的模型数据呢

型号.py

class GeneralContract(models.Model):

    idcontract = models.IntegerField(primary_key=True)
    client=models.ForeignKey(Person)
    issuedate = models.DateTimeField()  # Field name made lowercase.
    plan = models.ManyToManyField(Generalbusinessplans)
    annualpremium = models.FloatField()  # Field name made lowercase.
    doses = models.IntegerField(blank=True, null=True)
def addContractGeneralView(request):

    added=False
    if request.method == 'POST':
        contract_form = GeneralContractForm(request.POST)
        if contract_form.is_valid():
            profile = contract_form.save(commit=False)
            p = Person.objects.get(idperson=contract_form.cleaned_data['client'].idperson)
            print p
            if p.isclient == 0:
                print 'in if'
                p.isclient = 1
                p.save()
            profile.save()
            contract_form.save_m2m()
            print profile.plan
            added = True
        else:
            print contract_form.errors
    else:
        contract_form = GeneralContractForm()
    return render(request,
            'leadsMasterApp/addContractGeneral.html',
            {'add_contract_form':contract_form,'added': added})


def editContractGeneralView(request,pk):

    instance=get_object_or_404(GeneralContract, pk=pk)
    added=False
    if request.method == 'POST':
        contract_form = GeneralContractForm(request.POST,instance=instance)
        if contract_form.is_valid():
            profile = contract_form.save(commit=False)
            p = Person.objects.get(idperson=contract_form.cleaned_data['client'].idperson)
            print p
            if p.isclient == 0:
                print 'in if'
                p.isclient = 1
                p.save()
            profile.save()
            contract_form.save_m2m()
            print profile.plan
            added = True
        else:
            print contract_form.errors
    else:
        contract_form = GeneralContractForm(instance=instance)
    return render(request,
            'leadsMasterApp/addContractGeneral.html',
            {'add_contract_form':contract_form,'added': added})
视图.py

class GeneralContract(models.Model):

    idcontract = models.IntegerField(primary_key=True)
    client=models.ForeignKey(Person)
    issuedate = models.DateTimeField()  # Field name made lowercase.
    plan = models.ManyToManyField(Generalbusinessplans)
    annualpremium = models.FloatField()  # Field name made lowercase.
    doses = models.IntegerField(blank=True, null=True)
def addContractGeneralView(request):

    added=False
    if request.method == 'POST':
        contract_form = GeneralContractForm(request.POST)
        if contract_form.is_valid():
            profile = contract_form.save(commit=False)
            p = Person.objects.get(idperson=contract_form.cleaned_data['client'].idperson)
            print p
            if p.isclient == 0:
                print 'in if'
                p.isclient = 1
                p.save()
            profile.save()
            contract_form.save_m2m()
            print profile.plan
            added = True
        else:
            print contract_form.errors
    else:
        contract_form = GeneralContractForm()
    return render(request,
            'leadsMasterApp/addContractGeneral.html',
            {'add_contract_form':contract_form,'added': added})


def editContractGeneralView(request,pk):

    instance=get_object_or_404(GeneralContract, pk=pk)
    added=False
    if request.method == 'POST':
        contract_form = GeneralContractForm(request.POST,instance=instance)
        if contract_form.is_valid():
            profile = contract_form.save(commit=False)
            p = Person.objects.get(idperson=contract_form.cleaned_data['client'].idperson)
            print p
            if p.isclient == 0:
                print 'in if'
                p.isclient = 1
                p.save()
            profile.save()
            contract_form.save_m2m()
            print profile.plan
            added = True
        else:
            print contract_form.errors
    else:
        contract_form = GeneralContractForm(instance=instance)
    return render(request,
            'leadsMasterApp/addContractGeneral.html',
            {'add_contract_form':contract_form,'added': added})