Django & Form с SelectMultiple: нулевое значение в столбце x отношения y нарушает ограничение not-null
Я сталкиваюсь со следующей ошибкой при попытке сохранить проект после заполнения формы, где я выбираю несколько тегов для этого проекта:
null значение в столбце "tag_id" отношения "project_tags" нарушает ограничение not-null ПОДРОБНАЯ ИНФОРМАЦИЯ: Неудачная строка содержит (10263, 10262, null). --> project_tags(id, project_id, tag_id)
Модель базы данных проста: У меня есть проекты, и у каждого проекта есть тег(ы). Все определяется следующими моделями:
class Project(models.Model):
id = models.AutoField(primary_key=True)
client = models.ForeignKey(User, on_delete=models.CASCADE)
start_date = models.DateField()
end_date = models.DateField()
class Meta:
managed = False
db_table = 'project'
def get_absolute_url(self):
return reverse('project-detail', kwargs={'pk': self.pk})
class ProjectTag(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=30)
class Meta:
managed = False
db_table = 'project_tag'
def __str__(self):
return self.name
class ProjectTags(models.Model):
id = models.AutoField(primary_key=True)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
tag = models.ManyToManyField(ProjectTag)
class Meta:
managed = False
db_table = 'project_tags'
Вид следующий:
@login_required
def add_project(request):
submitted = False
if request.method == "POST":
form1 = ProjectForm(request.POST)
form2 = ProjectTagsForm(request.POST)
if form1.is_valid() and form2.is_valid():
form1_part = form1.save(commit=False)
form1_part.client = request.user
form1_part.save()
project_id = Project.objects.get(id=form1_part.id)
form2_part = form2.save(commit=False)
form2_part.project = project_id
form2_part.save()
return HttpResponseRedirect('/project/new?submitted=True')
else:
form1 = ProjectForm
form2 = ProjectTagsForm
if 'submitted' in request.GET:
submitted = True
context = {'form1':form1
,'form2':form2
,'submitted':submitted
}
return render(request, 'home_page/add_project.html',context)
WIth следующие формы, которые обе находятся в одном шаблоне:
class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ('start_date', 'end_date')
def __init__(self, *args, **kwargs):
super(ProjectForm, self).__init__(*args, **kwargs)
class ProjectTagsForm(forms.ModelForm):
class Meta:
model = ProjectTags
fields = ('tag',)
widgets = {
'tag': forms.SelectMultiple(attrs={'class': 'form-control','size': 12})
}
{% if submitted %}
Your project was submitted successfully!
{% else %}
<form action="" method=POST>
{% csrf_token %}
{{ form1.as_p }}
{{ form2 }}
<input type="submit" value="submit me" class="btn btn-secondary">
Я понимаю проблему, что после отправки формы она не может преобразовать выбранные имена тегов в tag_ids для заполнения записей (id,project_id,tag_id) и вставки их в таблицу db (так как таблица не позволяет nulls в качестве tag_id), но я понятия не имею, как это исправить, особенно когда это практически копи-паст этого видео Codemy и его скрипта, где это работало https://youtu.be/x99hW1N8Nug