Diango模型属性可返回其他模型的对象列表

时间:2019-07-28 20:27:40

标签: django django-models django-serializer

我有2个这样的模型:

class Company(models.Model):
    name = models.CharField(max_length=200)
    address = models.CharField(max_length=200)

    class Meta:
        verbose_name = 'Company'

另一个模型:

class Product(models.Model):
    name = models.CharField(max_length=200)
    company = models.ForeignKey(to=Company, on_delete=models.PROTECT)

    class Meta:
        verbose_name = 'Product'

现在,我需要在Company模型中创建一个属性,该属性可以返回所有产品对象的列表,例如

@property
def products (self):
    products = []

    for i in Product.objects().filter(company=self.id):
        products.append(i)

    return products

当我在CompanySerializer字段中提到产品(属性)时,它给我一个错误,即它无法返回对象列表。

任何人都可以解决我的问题,并告诉我代码有什么问题吗?

2 个答案:

答案 0 :(得分:1)

Django会动态向模型添加属性,这些属性会返回包含所有相关对象的查询集。默认情况下,该属性命名为<model name lowercase>_set

company.product_set.all()

可以通过将related_name传递到ForeignKey

来更改此属性的名称。
class Product(models.Model):
    company = models.ForeignKey(to=Company, on_delete=models.PROTECT, related_name='products')

company.products.all()

答案 1 :(得分:1)

我认为,如果需要API中的结果列表,则应使用model_to_dict函数。喜欢,

remove-item filesystem::\\uncpath\folder

然后,您可以在公司序列化器类字段中包含此“产品”属性。希望这会有所帮助!