如何使用带有外键'__str__返回的非字符串(产品类型)'的__str__

时间:2019-09-04 17:34:57

标签: python django model

当我尝试

__str__()

针对外国人的方法会提供此错误

__str__ returned non-string (type Product)

models.py

class Product(models.Model):
    product_name = models.CharField(unique=True, max_length=50 , 
    blank=False,null=False)
    price = models.PositiveIntegerField()
    active = models.BooleanField(default=True)
    def __str__(self):
        return self.product_name
class ProductOrder(models.Model):


    product = models.ForeignKey(Product, on_delete=models.CASCADE , 
    null=True)
    ordering = models.ForeignKey(Order, 
    on_delete=models.CASCADE,blank=True,null=True)
    pass 


    def __str__(self):
        return self.product

我也尝试过

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

#product_name is a field from Product table 

将提供的错误是

__str__ returned non-string (type QuerySet)

如何表示它,谢谢您的答复!

4 个答案:

答案 0 :(得分:3)

除了str方法中的__str__外,您不能返回其他任何内容。 self.product不是str,而是Product对象。

不过,您可以在其上调用str(..),以获得该Product的文本表示形式:

class ProductOrder(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
    ordering = models.ForeignKey(Order, on_delete=models.CASCADE,blank=True,null=True)

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

答案 1 :(得分:3)

由于models.ForeignKey(Product, on_delete=models.CASCADE , null=True)不返回str,因此请返回该函数的字符串或尝试执行

return str(self.product)

答案 2 :(得分:2)

尝试

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

另外,您可能需要在__str__模型上定义Product方法

答案 3 :(得分:0)

ForeignKey 返回连接到Key的整个链接库。您需要从 ProductOrder 返回 CharFeiled ,或从其他类中像 self.product.product_name 一样搅拌。