Значения в поле «многие ко многим» не выбираются при редактировании объекта в пользовательском представлении Django (не с правами администратора) - PullRequest
1 голос
/ 06 сентября 2011

У нас есть django-модель, содержащая поле «многие ко многим».Мы используем ту же форму для добавления / редактирования объектов.Когда существующий объект загружен для редактирования, все поля имеют связанные с ним значения , за исключением поля «многие ко многим» (ни один из параметров, если выбран виджет MultipleSelectBox)

Есть лиспециальный способ привязки значений к полю «многие ко многим», чтобы текущие значения поля отображались выбранными в виджете MultipleSelectBox, когда форма загружает объект для редактирования.

Я попытался прочитать похожие вопросыпользователями на SO, но не смог найти ответ на мой запрос: (.

Ответы [ 2 ]

1 голос
/ 05 апреля 2013

Была такая же проблема, и это было вызвано commit=False.Способ исправить это с помощью save_m2m()

# Create a form instance with POST data.
f = AuthorForm(request.POST)
# Create, but don't save the new author instance.
new_author = f.save(commit=False)
# Modify the author in some way.
new_author.some_field = 'some_value'
# Save the new instance.
new_author.save()
# Now, save the many-to-many data for the form.
f.save_m2m()
0 голосов
/ 08 сентября 2011

Попробуйте сделать это! Это мой пример, чтобы показать вам, как вы можете это сделать: D

class FirstModel(models.Model):
    title = models.CharField(max_length = 100, unique = True)

class SecondModel(models.Model):
    name = models.CharField(max_length = 100, unique = True)
    first_model = models.ManyToManyField(FirstModel)

class MyForm(forms.Form):
    name = forms.CharField(max_length = 100, required = True)
    first_model = forms.ChoiceField(widget = forms.MultipleSelect)

После сохранения в функции добавления, затем для редактирования в функции редактирования выполните следующее:

def edit(request):
    my_model = MyModel.objects.filter(name = 'You Unique Name').get()
    first_model = my_model.first_model.all()
    my_form = MyForm(initial = {'first_model': first_model})

Вот и все: D

...