Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ModelForm ManyToManyField初始值_Python_Django_Django 1.11 - Fatal编程技术网

Python Django ModelForm ManyToManyField初始值

Python Django ModelForm ManyToManyField初始值,python,django,django-1.11,Python,Django,Django 1.11,我正在使用Django 1.11.2开发一个网站。我使用ModelForms在我的网站上编辑模型实例。表单的每个字段都通过视图中的“initial”获取要编辑的实例的拟合值。它适用于除许多领域外的所有领域 相关代码如下所示: models.py: class model1(models.Model): name = models.CharField(max_length=45, blank=False, null=False) class model2(models.Model):

我正在使用Django 1.11.2开发一个网站。我使用ModelForms在我的网站上编辑模型实例。表单的每个字段都通过视图中的“initial”获取要编辑的实例的拟合值。它适用于除许多领域外的所有领域

相关代码如下所示:

models.py:

class model1(models.Model):
    name = models.CharField(max_length=45, blank=False, null=False)

class model2(models.Model):
    name = models.CharField(max_length=45, blank=False, null=False)
    relation = models.ManyToManyField(model1)
forms.py中的ModelForm:

class model2_form(forms.ModelForm):
    class Meta:
        model = model2
        fields = '__all__'
以及我用于编辑model2 Intance的视图:

def model2_edit(request, objectid):
    link = 'Model2'
    model2_inst = model2.objects.get(id=objectid)
    form = model2_form(initial={'name': model2_inst.name,
                                'relation': ???})
    if request.method == 'POST':
        f = model2_form(request.POST, instance=model2_inst)
        if f.is_valid():
            f.save()
            return HttpResponseRedirect('/model2')
    return render(request, "edit_db.html",
                  {"form": form, "link":link})
每次我通过ModelForm编辑model2的实例时,都不会预先选择已经存在的实例的“关系”(“初始”不起作用)。如果我像这样保存表单而不再次选择关系,它们将被删除,model2的实例将不再具有关系。 在代码中的“??”位置,我尝试了许多方法来获得表单中已经选择的关系,但我找不到有效的方法


我希望我能够描述我的问题,提前感谢您的帮助或想法。

您应该为GET和POST请求提供
实例。这样,您就不需要提供
initial
data-Django将自动从实例中获取值

form = model2_form(initial={'name': model2_inst.name,
                            'relation': [i.id for i in model2_inst.relation.all()]})
model2_inst = model2.objects.get(id=objectid)
form = model2_form(instance=model2_inst)

您应该为GET和POST请求提供
实例
。这样,您就不需要提供
initial
data-Django将自动从实例中获取值

model2_inst = model2.objects.get(id=objectid)
form = model2_form(instance=model2_inst)

非常感谢,我以为我试过了,一定是弄错了。现在它很好用了。非常感谢,我以为我试过了,我一定是弄错了。现在它工作得很好。谢谢,这使它更简单。谢谢,这使它更简单。