Я использую Django 1.11.2 для разработки веб-сайта. Я использую ModelForms для редактирования экземпляров модели на своем веб-сайте. Каждое поле формы получает подходящее значение экземпляра, который я хочу отредактировать, через «начальный» в моем представлении. Он отлично работает для всех полей, кроме ManyToManyFields.
Соответствующий код выглядит так:
модели.ру:
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:
class model2_form(forms.ModelForm):
class Meta:
model = model2
fields = '__all__'
и представление, которое я использую для редактирования экземпляров модели2:
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})
Каждый раз, когда я редактирую экземпляр model2 через ModelForm, «отношения» экземпляра, которые уже существуют, не выбираются заранее («исходный» не работает). Если я сохраню такую форму без повторного выбора отношений, они будут удалены, и этот экземпляр model2 больше не будет иметь отношений. На месте '???' в моем коде я пробовал много способов получить эти отношения, уже выбранные в форме, но я не мог найти рабочий способ.
Надеюсь, мне удалось описать свою проблему, заранее спасибо за любую помощь или идеи.