用户未与帖子模型关联

时间:2018-07-14 03:27:01

标签: django forms model

我正在尝试使当前登录的用户成为他们从Post模型创建的帖子的author。到目前为止,除用户外,他们在表单中填写的所有信息均已收集并成功存储在数据库中。目前,这表明没有用户登录,我不确定为什么要登录。我尝试提出要求。 POST和GET请求的user和instance = request.user,到目前为止似乎没有任何效果。

views.py

def create(request):
    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save()
        return render(request, 'classifieds/latest-ads.html')
    else:
        form = PostForm(instance=request.user)
        args = {'form': form}
        return render(request, 'classifieds/create-post.html', args)

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Post(models.Model):

    title = models.CharField(max_length=150)
    price = models.CharField(max_length=100)
    body = models.TextField()
    contact_email = models.CharField(max_length=80, null=True)
    contact_number = models.IntegerField(default=250, null=True)
    pub_date = models.DateTimeField(null=True)
    author = models.ForeignKey(User, null=True)
    category = models.CharField(max_length=150, null=True)
    picture = models.ImageField(upload_to='ad_pictures', default='')



    def __str__(self):
        return self.title

forms.py

from django import forms
from .models import Post
from django.contrib.auth.models import User

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = (
            'price',
            'title',
            'body',
            'author',
            'contact_email',
            'contact_number',
            'picture',
        )

Herecreate-post.html模板的图片,显示为form.as_p。请注意,Author字段为空白。如果我从下拉列表中选择正确的作者,则该帖子将按原样保存。但是,我无法让已登录的用户出现。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

用户的外键字段的名称称为author。但是,您尝试使用名为user的未命名字段将用户添加到帖子中。

create视图中,行:

...
instance.user = request.user
#        ^^^^ this is your mistake
...

您需要使用instance.author = request.user


更新:您还需要从ModelForm中排除author外键字段。

我不知道必须排除外键字段的确切原因,但是如果找到答案,我将更新答案。这很可能是一个错误,因为文档未提及此类内容。