Django,评论无法获得他们所在帖子的名称

时间:2018-04-14 00:00:51

标签: python django html5 web server

我遇到了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

1 个答案:

答案 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;因为你没有将它链接到任何帖子,但在上面的例子中,我已经向你展示了我是如何做到的,以及你如何为你的项目做同样的事情**