【问题标题】:Django: Accessing a model's field through a another modelDjango:通过另一个模型访问模型的字段
【发布时间】:2019-09-30 21:46:33
【问题描述】:

所以我有 2 个模型:

class Product(models.Model):
    BANANA = 'BAN'
    PRODUCT_CHOICES = (
        (BANANA, 'Banana'),
    ) 

    name = models.CharField(choices=PRODUCT_CHOICES, max_length=255, default=BANANA)
    shelf_life = models.IntegerField(null=True, blank=True)

class PurchasedOrder(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    purchased_date = models.DateTimeField(auto_now_add=True)
    expired = models.BooleanField(default=False)

目标:获取我所有未过期且购买日期小于现在时间和产品保质期的购买订单。

我尝试了以下 sudo 代码,我想知道如何访问此 PurchasedOrder 的产品保质期,因为采购订单有一个产品的外键。我可以创建一些 for 循环,但必须有一种方法可以通过 PurchaseOrder 访问产品的保质期字段。

PurchasedOrder.objects.filter(
    expired=False,
    purchased_date__lt=F(datetime.now() - product__shelf_life),
)

感谢您的帮助

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您使用的是 PostgreSQL,这个answer 应该会为您解决。

    from datetime import timedelta
    from django.utils import timezone
    
    now = timezone.now()
    PurchasedOrder.objects.filter(
        expired=False,
        purchased_date__lt=now - timedelta(days=1)*F("product__shelf_life"),
    )
    

    【讨论】:

    • 使用 sqlite 可以做到这一点吗?
    • 对不起,我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2013-06-12
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多