__str__ 返回非字符串(类别类型)。当我从管理员添加 post

__str__ returned non-string (type Category). when I add post from admin

在照片模型中添加用户和 date_added 后,当我从管理员添加 post 时,它抛出一个错误提示:str returned non -string(类别类型),当我在主页模板中单击添加 post link 时,它会抛出另一个错误:'tuple' object has no attribute 'name'。我该如何解决?

models.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)

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

class Photo(models.Model):
    # …
    
    def __str__(self):
        return <strong>str(</strong>self.category<strong>)</strong>

好吧,这与您添加到 post create view.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)