尝试添加新帖子时,如何解决Django上“与此用户已存在的帖子”错误?

时间:2019-05-27 17:52:43

标签: django django-models django-forms django-views

我有一个create_post视图,通过该视图,我尝试向正在处理的博客添加新帖子。但是,当我填写包括用户(所有注册用户的下拉菜单),标题和文本的表单后,单击“提交”时,我已经收到与该用户的帖子。如下所示,post.user有一个外键User。并不是说一个帖子只能有一个用户(作者),而一个用户可能有很多帖子。为什么不允许同一用户添加其他帖子?

此外,如果用户通过了身份验证,那么我如何利用Django的内置组件来显示诸如“以{{user.username}}发帖或以{{user.username}}注释的评论”的消息。

我不必在发表评论的同时在文本框中写下用户名,而是希望在用户登录后获取用户名,而不是要求用户在文本框中编写用户名,因为我认为这没有任何意义。我在想可能需要在form.py中使用小部件并使用HiddenInputs()?

自从我最近加入该社区以来,如果我违反任何社区规则,我深表歉意。

models.py

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    published_date = models.DateTimeField(auto_now=True)

    def summary(self):
        """Return a summary for very long posts to
        get a glimpse from admin panel"""
        return self.text[:100]

    def pub_date_pretty(self):
        return self.published_date.strftime('%b %e, %Y')

    def __str__(self):
        """String representation"""
        return self.title

    def get_absolute_url(self):
        """Returns the url to access a detailed post"""
        return reverse('post-detail', kwargs={"pk": self.pk})

    class Meta:
        ordering = ['-published_date']
        unique_together = ('user',)

forms.py

from django import forms
from .models import Post, Comment

class PostForm(forms.ModelForm):
    class Meta():
        model = Post
        fields = ['user', 'title', 'text',]


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('user', 'text',)

views.py

from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from .models import Post, Comment
from django.utils import timezone
from django.views.generic import ListView, DetailView
from .forms import PostForm, CommentForm
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def create_post(request):
    if request.method == 'POST':
        post_form = PostForm(request.POST)

        if post_form.is_valid():
            post = post_form.save(request)
            post.save()
        else:
            print(post_form.errors)
    else:
            post_form = PostForm()

    context = {
        'post_form': post_form,
    }

    return render(request, 'blog/addpost.html', context )

def add_comment_to_post(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        form = CommentForm(request.POST)

        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('post-detail', pk=pk)

    else:
        form = CommentForm()
    return render(request, 'blog/add_comment_to_post.html', {'form': form,
                                                             })

1 个答案:

答案 0 :(得分:2)

Post.Meta中,您已经定义了一个unique_together约束,其中只有用户。这应该删除

class Meta:
    ordering = ['-published_date']
    unique_together = ('user',)  # This line here