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 字段中。希望,这有帮助!
我有 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 字段中。希望,这有帮助!