__str__返回非字符串(类型为Category).当我添加来自管理员的帖子时



在照片模型中添加user和date_added后,当我从管理员添加帖子时,它会向我抛出一个错误,说:str返回非字符串(类型为Category(,当我单击主模板中的addpost链接时,它又抛出另一个错误:'tuple'对象没有属性'name'。我该怎么解决?

模型.py:

from django.db import models
from cloudinary.models import CloudinaryField
from django.contrib.auth.models import User
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return self.name
class Photo(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, 
blank=True)
image = CloudinaryField('image')
description = models.TextField(null=True)
date_added = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.category

view.py文件:

def home(request):
category = request.GET.get('category')
if category == None:
photos = Photo.objects.all()
else:
photos = Photo.objects.filter(category__name=category)

categories = Category.objects.all()
context = {'categories': categories, 'photos': photos}
return render(request, 'home.html', {'categories': categories, 'photos': photos} )

def viewPhoto(request, pk):
photo = Photo.objects.get(id=pk)
return render(request, 'photo.html', {'phpto': photo})

class PostCreativeView(LoginRequiredMixin, CreateView):
model = Photo, Category
fields = ['description', 'image', 'category', 'name']
template_name = 'post_create.html'

def form_valid(self, form):
form.instance.user = self.request.user
return super (PostCreativeView, self).form_valid(form)

这与您在创建后视图.py中添加的类别名称和模型有关,因此您做了这样的事情:

views.py
class PostCreativeView(LoginRequiredMixin, CreateView):
model = Photo
fields = ['description', 'image', 'category']
template_name = 'post_create.html'

def form_valid(self, form):
form.instance.user = self.request.user
return super (PostCreativeView, self).form_valid(form)
#.......
# Models.py 
class Photo(models.Model):
#>>>...

def __str__(self):
return str(self.category)

您应该返回类别的str(…),因此:

class Photo(models.Model):
# …

def __str__(self):
returnstr(self.category)

最新更新