表单提交不生成新的Post对象

时间:2017-02-24 10:18:15

标签: python django forms models

我目前正在使用Django创建一个社交平台。现在,我正在开发他们的仪表板,并希望最终用户能够发布他们自己的帖子。这是我的帖子模型:

class Post(models.Model):
    user = models.ForeignKey(User)
    posted = models.DateTimeField(auto_now_add=True)
    content = models.CharField(max_length=150)
    Likes = models.IntegerField(default=0)

def __str__(self):
    return self.user.username

我的邮政模式表格:

class Post_form(forms.ModelForm):

    class Meta:
        model = Post
        fields = (
             'content',
            ]

    def __init__(self, *args, **kwargs):
        super(Post_form, self).__init__(*args, **kwargs)
        self.fields['content'].label = ""
        self.fields['content'].widget.attrs={
            'id': 'id_content',
            'class': 'myCustomClass',
            'name': 'name_content',
            'placeholder': 'What are you thinking about?',
        }

表单提交后,它会正确生成一个带有content字段值的POST请求。当我在视图中保存表单时,不会生成新帖子。我做错了什么?

我的views.py:

def dashboard_view(request):
    if request.POST:
        form = Post_form(data=request.POST, instance=request.user)
        if form.is_valid():
            form.save() // <- no new post gets generated after saving
            return redirect(reverse('dashboard'))
        else:
            return redirect(reverse('settings'))
    else:
        form = Post_form
        gebruikers = User.objects.all()
        all_posts = Post.objects.all().order_by('-posted')
        return render(request, 'Dashboard/index.html', {'gebruiker':gebruikers, 'posts':all_posts, 'form': form},)

1 个答案:

答案 0 :(得分:1)

您无法将用户作为实例参数传递给Post表单。您应该省略该参数并将用户分配给从save返回的实际Post实例。

form = Post_form(data=request.POST)
if form.is_valid():
    post = form.save(commit=False)
    post.user = request.user
    post.save()
相关问题