django 尝试使用模型示例更新字段review.Review.name,请使用与CharField兼容的值

7gyucuyw  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(113)

我试图使用我创建的函数添加一个评论,出现了这个错误。
这是我在models.py中的Review模型,它在app中review

class Review(models.Model):
    title=models.CharField(max_length=100)
    place=models.ForeignKey(Place,on_delete=models.CASCADE,null=True)
    location=models.CharField(max_length=100,default='place')
    photo=models.ImageField(upload_to='places')
    desc=models.TextField(max_length=3000,default=None)
    name=models.CharField(max_length=50,default=None)

    def __str__(self):
        return self.location

字符串
这是地址

href="{% url 'review:add_review' place.slug %}"


这是路径

from django.urls import path
from review import views

app_name="review"
urlpatterns = [
    path('add_review/<slug:pslug>',views.addreview,name='add_review'),
]


这是views.py中的添加评论函数

def addreview(request,pslug):
    place=Place.objects.get(slug=pslug)
    if(request.method=="POST"):
        user=request.user
        title=request.POST['title']
        review=request.POST['review']
        photo=request.FILES['photo']
        review=Review.objects.create(title=title,desc=review,
                                     name=user,photo=photo,
                                     place=place)
        review.save()
        return placedetail(request,pslug)
    else:
        pass
    return render(request,'addreview.html')


我做错了什么,我该如何弥补……

ubby3x7f

ubby3x7f1#

在模型定义中,您声明

name=models.CharField(max_length=50,default=None)

字符串
这意味着名称必须填充CharField,这意味着,它必须是一个文本。
在你看来,当你这么做的时候

review=Review.objects.create(title=title,desc=review,
                                     name=user,photo=photo,
                                     place=place)


您试图用user填充“name”字段,这是一个包含用户模型示例的变量(阅读上面的user=request.user
如果你想让“name”成为评论的作者,你需要改变你的模型(name将是一个指向用户模型的ForeignKey)。或者你可以用一个文本填充“name”,这样也可以解决这个问题(但我不知道你的确切目标是什么)。

相关问题