【问题标题】:Django make a double foreign key lookup involving one to many to one relationsDjango进行涉及一对多对一关系的双重外键查找
【发布时间】:2016-02-21 22:19:14
【问题描述】:

我有以下型号:

def Order(models.Model):
    receiver = models.ForeignKey(Receiver)
    warehouse = models.ForeignKey(Warehouse)

def Receiver(models.Model):
    user = models.ForeignKey(User) #this is not made one to one because user can have more than one receiver
    name = ...
    zipcode = ...

def Warehouse(models.Model):
    city = ...
    street = ...

我想选择所有与 request.User 对象相关的 Warehouse 条目。我现在能做到的唯一方法是:

orders = Order.objects.filter(receiver__user=request.User)
# here i set orders warehouse ids to list called ids
user_warehouses = Warehouse.objects.filter(pk__in=ids)

但我有一种强烈的感觉,我正在发明轮子。有没有更简单的 Django 方式来做到这一点?

【问题讨论】:

    标签: django django-models foreign-keys django-queryset one-to-many


    【解决方案1】:
    Warehouse.objects.filter(order__receiver__user=request.user)
    

    您可以向后遍历关系(“反向查找”)并使用双下划线语法遍历多个级别

    https://docs.djangoproject.com/en/1.8/topics/db/queries/#lookups-that-span-relationships

    【讨论】:

    • 但是Warehouse模型没有order字段,它只能给我们order_set
    • 对于你必须做的对象a_warehouse.order_set.filter(whatever),但是对于查找,如文档中所述,你只需使用相关模型的小写名称
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2011-12-20
    • 2019-06-12
    • 2011-12-06
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多