我想让当前登录的用户访问这个 CreateForm 表单。下面我给出了我当前的代码,这里 request.user 没有给我错误
/create-post/ 处的 ValueError 无法分配“<SimpleLazyObject: <User: testuser>>”:“Post.author”必须是“Author”实例。
模型.py
class Author(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
rate = models.IntegerField(default=0)
class Post(models.Model):
title = models.CharField(max_length= 50)
overview = models.TextField()
body_text = RichTextUploadingField(null = True)
time_upload = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author, related_name='author', on_delete=models.CASCADE)
thumbnail = models.ImageField(upload_to = 'thumbnails')
publish = models.BooleanField()
categories = models.ManyToManyField(Categories)
read = models.IntegerField(default=0)
slug = models.SlugField(null= True, blank= True)
表格.py
class CreateForm(ModelForm):
class Meta:
model = Post
fields = [
'title',
'overview',
'body_text',
'thumbnail',
'categories',
'publish',
]
视图.py
def create_post(request):
if request.method == 'POST':
form = CreateForm(request.POST, request.FILES)
if form.is_valid:
post = form.save(commit=False)
post.author= request.user
post.save()
return render(request, 'index.html')
else:
form = CreateForm()
return render(request, 'create_post.html', {'form': form})
正如错误所说,post.author
需要一个Author
对象,而不是用户。因此,您可以通过以下方式检索它:
from django.contrib.auth.decorators import login_required
@login_required
def create_post(request):
if request.method == 'POST':
form = CreateForm(request.POST, request.FILES)
if form.is_valid():
form.instance.author= request.user.author
form.save()
return render(request, 'index.html')
else:
form = CreateForm()
return render(request, 'create_post.html', {'form': form})
您还应该调用is_valid()
方法 [Django-doc],所以.form.is_valid()
注意:您可以使用
@login_required
装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图。
注意:通常使用[Django-doc]引用用户模型比直接使用模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用模型部分。
settings.AUTH_USER_MODEL
User
User
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句