Как присоединить внешний ключ при сохранении формы в модель?
У меня есть модель для сайта блога, которая содержит 4 поля - post_author, post_title, post_content и date_published.
Также у меня есть форма для добавления нового поста, которая имеет 2 поля post_title и post_content. Но когда я пытаюсь добавить новый пост, он показывает Error:NOT NULL constraint failed: blog_post.author_id
Мое поле даты в модели должно заполняться автоматически, но User-id, который является внешним ключом, не заполняется.
Как мне прикрепить user_id при сохранении формы?
модель поста:
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
Форма для нового сообщения:
class newPost(forms.ModelForm):
title = forms.CharField(required =True, max_length=30)
class Meta:
model = Post
fields = ['title','content']
функция просмотра:
@login_required
def newpost(request):
if request.method == 'POST':
post = newPost(request.POST or None)
if post.is_valid():
#how to add author of this post ??
post.save()
messages.success(request,f'New blog post added. Add more if you want')
return redirect('blog-newpost')
else:
post = newPost()
context = {'title':'New Post','post': post}
return render(request,'blog/newpost.html',context)
Работает ли это?
@login_required
def newpost(request):
if request.method == 'POST':
post = newPost(request.POST or None)
if post.is_valid():
#how to add author of this post ??
# post.save()
title = post.cleaned_data['title']
content = post.cleaned_data['content']
new_post= Post.objects.get_or_create(
title=title,
content=content,
author=request.user
)
new_post.save()
messages.success(request,f'New blog post added. Add more if you want')
return redirect('blog-newpost')
else:
post = newPost()
context = {'title':'New Post','post': post}
return render(request,'blog/newpost.html',context)
EDIT: этот тоже может работать
@login_required
def newpost(request):
if request.method == 'POST':
post = newPost(request.POST or None)
if post.is_valid():
#how to add author of this post ??
new_post = post.save(commit=False)
new_post.author = request.user
new_post.save()
messages.success(request,f'New blog post added. Add more if you want')
return redirect('blog-newpost')
else:
post = newPost()
context = {'title':'New Post','post': post}
return render(request,'blog/newpost.html',context)