Diango模型属性到return其他模型的对象列表

Diango model property to return list of objects of other model

我有 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 模型中创建一个 属性,它可以 return 所有产品对象的列表,例如

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

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

    return products

当我在 CompanySerializer 字段中提及产品 (属性) 时,它给我一个错误,它不能 return 对象列表。

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

Django 动态地向您的模型添加属性,return 一个包含所有相关对象的查询集。默认情况下 属性 被命名为 <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()

我想如果你想在 API 中得到结果列表,你应该使用 model_to_dict 函数。喜欢,

@property
def products(self):
    from django.forms.models import model_to_dict

    res = []
    for i in Product.objects.filter(company=self.id):
        res.append(model_to_dict(i))

    return res

然后,您可以将此 'products' 属性 包含在您的公司序列化程序 class 字段中。希望,这有帮助!