I have Post model and Message model.
I want to get POST, create message on one post and preview it.
I have ValueError Cannot assign "<bound method PostDetailView.post of <blog.views.PostDetailView object at 0x7fa9a370b8>>": "Message.post" must be a "Post" instance. at body = request.POST.get('body')
How can I do this?
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User,on_delete=models.CASCADE)
topic = models.ForeignKey(Topic,on_delete=models.SET_NULL,null=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail',kwargs={'pk':self.pk})
class Message(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
post = models.ForeignKey(Post,on_delete=models.CASCADE)
body = models.TextField()
date_posted = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.body[0:50]
views.py
class PostDetailView(DetailView):
model = Post
def post(self, request, *args, **kwargs):
message = Message(
user = request.user,
post = self.post,
body = request.POST.get('body')
)
message.save()
return super(PostDetailView,self).post(request, *args, **kwargs)
urls.py
urlpatterns = [
path('post/<int:pk>',PostDetailView.as_view(),name='post-detail')
]
Assuming your url has the
post_idparameter, as inhttps://example.com/?post_id=1:This should get you going. I strongly recommend setting up a serializer to validate your query parameters though.
Then change your post function to: