【问题标题】:Get multiple columns data from extra query in Django从 Django 中的额外查询中获取多列数据
【发布时间】:2023-02-03 18:36:39
【问题描述】:

我有两个模型如下:

class Model1(models.model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    filename = models.CharField(max_length=255)

class Model2(models.model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    filename = models.CharField(max_length=255)

我想获得相关的model2,它在filename 中的列值与model1 中的列值相同。

我的解决方案是使用 SubqueryExtraSubquery的问题在于它只允许查询一列,但我想要的是model2model1相关的所有列的dict对象。他们不要foreignkey 关系才能使用 select_related。所以我尝试使用extra,但我再次收到多列错误。我怎么解决这个问题?

我的代码如下:

model1_objs = Model1.objects.filter(id=given_id).extra(
    select={
        "model2_obj": f"SELECT * 
                        FROM model2 
                        WHERE filename = model1.filename 
                        AND id = '{model2_id}'"
    }
)

这是行不通的。

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    这可能不如您考虑的解​​决方案有效,但您可以试试这个:

    model1_obj = Model1.objects.get(id=given_id)
    model2_objs = Model2.objects.filter(filename=model1_obj.filename)
    

    注意:考虑使用 get() 方法来获取唯一对象
    看看这个:Making queries (Django documentation)

    希望我正确理解你的问题

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2018-12-22
      • 1970-01-01
      • 2013-12-18
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2011-09-01
      相关资源
      最近更新 更多