我正在尝试使当前登录的用户成为他们从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',
)
Here是create-post.html
模板的图片,显示为form.as_p
。请注意,Author
字段为空白。如果我从下拉列表中选择正确的作者,则该帖子将按原样保存。但是,我无法让已登录的用户出现。
任何建议都将不胜感激。
答案 0 :(得分:1)
用户的外键字段的名称称为author
。但是,您尝试使用名为user
的未命名字段将用户添加到帖子中。
在create
视图中,行:
...
instance.user = request.user
# ^^^^ this is your mistake
...
您需要使用instance.author = request.user
。
更新:您还需要从ModelForm中排除author
外键字段。
我不知道必须排除外键字段的确切原因,但是如果找到答案,我将更新答案。这很可能是一个错误,因为文档未提及此类内容。