Задать вопрос
@sazhyk

Как работать с ManyToMany в Django?

Кто может объяснить на пальцах, а не в интерпретаторе как работать с ManyToMany в Django?
При условии
models.py
class Specialization(models.Model):

    spec_name = models.CharField(
        verbose_name="Специализация",
        max_length=150,
        null=False,
        blank=False,
    )


class Person(models.Model):

    author = models.ForeignKey(
        User,
        default=1,
        on_delete=models.PROTECT,
    )
    first_name = models.CharField(
        verbose_name="Имя",
        max_length=150,
        null=False,
        blank=False,
    )
    last_name = models.CharField(
        verbose_name="Фамилия",
        max_length=150,
        null=False,
        blank=False,
    )
    spec = models.ManyToManyField(
        Specialization,
    )

forms.py
class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        fields = (
            'first_name',
            'last_name',
        )

views.py
def new_person(request):

    if request.method == "POST":
        person_form = PersonForm(request.POST or None)
        if person_form.is_valid():
            instance = person_form.save(commit=False)
            instance.author = request.user
            instance.save()

            messages.success(request, "Создана запись в базе данных!")

            return HttpResponseRedirect('/person/new/')
    else:
        person_form = PersonForm()

    context = {
        'person_form': person_form
    }
    return render(request, 'form.html', context)

Мой моск отказывается понимать интерпретатор.

UPD:
В базе таблицы создаются, все 3. Таблица специализаций заполнена тремя записями. На странице выводится форма с полями: Имя, Фамилия, Специализации. Заполняю, жму submit. Но в базе не сохраняется отношение в таблице 'person_specialization'. Что я делаю не правильно? Вероятно не сохраняю это самое отношение. Но как его сохранить?
  • Вопрос задан
  • 2399 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы