Валидация формы 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 все успешно работает. Проанализировав, пришел к выводу, что связь многие ко многим здесь пожалуй не требуется.