首页 > 解决方案 > __str__ 返回非字符串(产品类型)

问题描述

当我尝试在我的 Django 项目中添加 OrderItem 时,我收到了 __ str __ 返回的非字符串(产品类型)

模型.py:

class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    date_ordered = models.DateField(auto_now_add=True, blank=True, null=True)
    complete = models.BooleanField(default=False)
    transaction_id = models.CharField(max_length=100, null=True)

    def __str__(self):
        return self.transaction_id



class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)

    def __str__(self):
        return self.product


class Product(models.Model):
     name = models.CharField(max_length=200, null=True)
     price = models.FloatField()
     image = models.ImageField(null=True, blank=True)
     tag = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True)


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


@property
def imageUrl(self):
    try:
        url = self.image.url
    except:
        url =''
    return url

管理员.py:

admin.site.register(Customer)
admin.site.register(Product)
admin.site.register(Order)
admin.site.register(Tag)
admin.site.register(OrderItem)

当我尝试这个时,我得到了同样的错误:

    class Product(models.Model):
     name = models.CharField(max_length=200, null=True)
     price = models.FloatField()
     image = models.ImageField(null=True, blank=True)
     tag = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True)


    def __str__(self):
         return 'test'

有时当我尝试添加/删除项目(在订单、订单项目、产品中)时出现此错误

标签: pythondjangodjango-models

解决方案


问题不是类的__str__方法Product,而是类的__str__方法OrderItemself.product不是字符串,而是Product对象,所以不能在__str__方法中返回 this。例如,您可以退回str(…)产品的:

class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)

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

推荐阅读