Валидация формы django

Моя форма возвращает правильные данные

<QueryDict: {'Id_Incidents': ['50'], 'Type_Participation': ['p'], 'Id_People': ['1'], 'Competencies': ['рн']}>

Но форма при этом не является валидной, ошибка status=400. Правильный ли я возвращаю формат данных от QueryDict?

Views.py

def add_person(request):
        id_incidents = request.session.get('Id_Incidents', 'ничего не передано')
        if request.method == "POST":
            if request.user:
                form = AkpGroupForm(request.POST)  # форма, созданная в forms.py чтобы добавить участника
                print(request.POST)
                if form.is_valid():
                    # group_created = form['Group'].save(commit=False)
                    # group_created.Id_Incidents = get_object_or_404(AkpIncidents, Id_Incidents=id_incidents)
                    # group_created.save()
                    Id_Incidents = form.cleaned_data['Id_Incidents']
                    Id_People = form.cleaned_data['Id_People']
                    Competencies = form.cleaned_data['Competencies']
                    Type_Participation = form.cleaned_data['Type_Participation']
                    new_person = AkpGroup(
                        Id_Incidents=Id_Incidents,
                        Id_People=Id_People,
                        Competencies=Competencies,
                        Type_Participation=Type_Participation,
                    )
                    new_person.save()
                    return HttpResponse(status=201)
                else:
                    return HttpResponse(status=400)

Models.py

class AkpGroup(models.Model):
    Id_Group = models.AutoField(primary_key=True, verbose_name='Идентификатор участника группы АКП')
    Id_Incidents = models.ForeignKey('AkpIncidents', models.DO_NOTHING, verbose_name='Идентификатор инцидента')
    # stage 3 fields
    Id_People = models.ManyToManyField('AkpPeople', verbose_name='Ф.И.О. участника')
    Competencies = models.CharField(max_length=256, verbose_name='Компетенции')

    LOAN_TYPE_PARTICIPATION = (
        ('d', 'Руководитель группы'),
        ('p', 'Член группы')
    )
    Type_Participation = models.CharField(max_length=1, choices=LOAN_TYPE_PARTICIPATION, default='p',
                                          verbose_name='Тип участия')

Начните с понимания того, что именно не валидно

if form.is_valid():
        return HttpResponse('All Good!')
    else:
        return HttpResponse(form.errors.values())  # Validation failed

Скорее всего проблема в ключах Id_Incidents и/или Id_People. Смущает если честно foreignkey от models.DO_NOTHING. Что это должно означать?

И коли уж используете форму, ей и создавайте запись в модели.

Причиной моих долгих и мучительных бед было использование связи ManyToManyField, при замене на ForeignKey все успешно работает. Проанализировав, пришел к выводу, что связь многие ко многим здесь пожалуй не требуется.

Вернуться на верх