IntegrityError at /users/create/ | NOT NULL constraint failed: users_post.author_id | Django Web App
Я следую учебникам по веб-приложениям от codemy.com Youtube и CS50x. Сейчас я пытаюсь добавить PostCategoryForm в мою функцию создания представления для модели Post в файле views.py.
views.py
def create(request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse("users:login"))
if request.method == 'POST':
# create new post
if request.POST.get('title') and request.POST.get('content'):
form = PostCategoryForm(request.POST)
form.save()
post=Post()
post.title = request.POST.get('title')
post.content = request.POST.get('content')
post.author = request.user
post.category = form
post.save()
return HttpResponseRedirect("/users/posts/{id}".format(id= post.id))
else:
form = PostCategoryForm()
return render(request, 'users/create.html', {
"form": form
})
models.py
class Post(models.Model):
title = models.TextField(max_length=255, unique=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
category = models.CharField(max_length=255, default='uncategorized')
post_date = models.DateField(auto_now_add=True)
def __str__(self):
return self.title + ' | ' + str(self.author)
def get_absolute_url(self):
return reverse('users:home')
class PostCategory(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('users:home')
forms.py
choices = PostCategory.objects.all().values_list('name', 'name')
choice_list = []
for item in choices:
choice_list.append(item)
class PostCategoryForm(forms.ModelForm):
class Meta:
model = Post
fields = ['category']
widgets = {
'category': forms.Select(choices=choice_list)
}
есть ли способ решить эту проблему или мне следует изменить функцию представления на представление класса? Заранее спасибо.
def create(request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse("users:login"))
if request.method == 'POST':
# create new post
if request.POST.get('title') and request.POST.get('content'):
form = PostCategoryForm(request.POST)
post=Post()
post.title = request.POST.get('title')
post.content = request.POST.get('content')
post.author = request.user
if form.is_valid():
post.category = form.cleaned_data['category']
post.save()
return HttpResponseRedirect("/users/posts/{id}".format(id= post.id))
else:
form = PostCategoryForm()
return render(request, 'users/create.html', {
"form": form
})
без сохранения формы и использование .clean_data['category'] решили проблему.