我遇到了Python Django的问题。它与外键和模型有关。我之前被告知,我的问题通常非常平庸,所以请耐心等待。我正在尝试为我正在研究的社交网络配置评论,我只是评论有效。问题是,虽然我可以输入注释,但数据库会记录它和编写注释的人,但它不会记录它所在的帖子。它总是返回null。这实际上是我能说的全部,因为我真的不明白发生了什么。以下是一些不同的代码片段和图片,希望能够详细说明问题而不需要我的感叹。
1: 后应用的模型 https://pastebin.com/XXNsCa5g
重要的模型是:
class Comment(models.Model):
2: 回复模板: https://pastebin.com/GsLUQqYp
3: 回复视图:
class PostReplyView(CreateView):
model = models.Comment
template_name = 'post_reply.html'
fields = ['comment']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
最后,可以直观地显示评论发布时遗漏的内容: enter image description here
答案 0 :(得分:0)
使用普通视图更新:
<强> models.py 强>
from django.db import models
from user.models import MyUser
from django.urls import reverse
# Create your models here.
class Post(models.Model):
user = models.ForeignKey(MyUser, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
content = models.TextField()
posted_on = models.DateTimeField(auto_now=True, auto_now_add=False)
updated_on = models.DateTimeField(auto_now=False, auto_now_add=True)
slug = models.SlugField(blank=True, null=True)
def __str__(self):
return "%s by %s" % (self.title, self.user.get_full_name())
def get_absolute_url(self):
return reverse('post:detail', kwargs={'slug':self.slug})
class Comment(models.Model):
author = models.ForeignKey(MyUser, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
comment = models.TextField()
posted_on = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return "%s commented on %s" % (self.author, self.post)
<强> forms.py 强>
from django import forms
from .models import Post, Comment
class newPost(forms.ModelForm):
class Meta:
model = Post
fields = ['title','content']
class newComment(forms.ModelForm):
class Meta:
model = Comment
fields = ['comment']
<强> views.py 强>
def detail(request, slug=None):
post = get_object_or_404(Post, slug=slug)
user = request.user
if request.method == 'POST':
comment = newComment(request.POST)
if comment.is_valid():
new_Comment = comment.save(commit=False)
new_Comment.author = user
new_Comment.post = post
new_Comment.save()
# successfully commented, now do whatever you want
return HttpResponse('commented')
else:
comment = newComment()
context = {
'post' : post,
'comment' : comment
}
return render(request, 'post/detail.html', context)
<强> detail.html 强>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<hr>
<form action="" method="post">
{% csrf_token %}
{{ comment.as_p }}
<input type="submit">
</form>
**你正在#34; post&#34;因为你没有将它链接到任何帖子,但在上面的例子中,我已经向你展示了我是如何做到的,以及你如何为你的项目做同样的事情**