有没有一种方法可以从Django模型中选择特定字段?

时间:2020-04-08 19:45:34

标签: python django django-models

是否可以使用外键从模型中选择某些特定字段。这是一个例子: 假设我有

class Product(models.Model):
    CATEGORY = (
            ('A', 'A'),
            ('B', 'B'),
            ('C', 'C'),
            )
    name = models.CharField(max_length=200, null=True)
    price = models.FloatField(null=True)
    category = models.CharField(max_length=200, null=True, choices=CATEGORY)
    description = models.CharField(max_length=200, null=True)
    date_created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.name

class Order(models.Model):
    STATUS = (
            ('Work Under Progress', 'Work Under Progress'),
            ('Delivered', 'Delivered'),
            )

    product = models.ForeignKey(Product, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=200, null=True, 
        choices=STATUS) 
    def __str__(self):
        return self.product.name

目的是在Order类中获取产品名称和产品价格。 有什么办法吗? (我对Django非常陌生,可以在文档中找到它)

谢谢

2 个答案:

答案 0 :(得分:1)

是的,您可以使用以下示例进行查询:

from django.db.models import F

orders = Order.objects.annotate(
    product_name=F('product__name'),
    product_price=F('product_price')
)

this 查询集产生的Order对象将具有两个额外的属性.product_name.product_price,其中包含name和{与price相关的{1}}。

Product对象本身中,您可以只使用Order。您已经这样做了,例如在self.product.name方法中。例如,您可以使用以下方法获取相关__str__的{​​{1}}和name

price

答案 1 :(得分:0)

我在这里发现了某种类似的东西

Django ForeignKey limit_choices_to a different ForeignKey id

我将实施此解决方案,看看它是否对我有用