【问题标题】:Django Query when returning multiple fields返回多个字段时的Django Query
【发布时间】:2014-11-26 11:32:00
【问题描述】:

我有一个模型,我想将 return 字段从单个字段更改为串联的字段字符串。我已经这样做了,它工作正常,当我尝试查询与该模型相关的外键时出现问题。

当前代码

Models.py - 物品应用

class Details(models.Model):
    serial_number = models.CharField(max_length = 300, unique=True, null = True, blank = True)
    manufacturer = models.CharField(max_length = 300, null = True, blank = True)
    model_type = models.CharField(max_length = 300, null = True, blank = True)
    equipment_type = models.CharField(max_length = 300, null = True, blank = True)

    class Meta:
        ordering = ["serial_number"]

    def __unicode__(self):  # Python 3: def __str__(self):
        return self.serial_number

Views.py - Instruments 应用:查询

queryset = InstrumentAnnual.objects.get(instrument_details__serial_number = self.object.instrument_annual, current_revision = True)

注意: 'InstrumentAnnual' 模型有一个外键到 'Details' 模型,称为 'Instrument_Details强>'.

新代码

Models.py - 物品应用

class Details(models.Model):
    serial_number = models.CharField(max_length = 300, unique=True, null = True, blank = True)
    manufacturer = models.CharField(max_length = 300, null = True, blank = True)
    model_type = models.CharField(max_length = 300, null = True, blank = True)
    equipment_type = models.CharField(max_length = 300, null = True, blank = True)

    class Meta:
        ordering = ["serial_number"]

    def __unicode__(self):  # Python 3: def __str__(self):
        return u"%s %s %s" % (self.manufacturer, self.model_type, self.equipment_type)

所以我的问题是如何通过外键查询上述模型,因为它不再返回self.serial_number,所以我不能在查询中使用__serial_number

我想要的结果只是在外键下拉列表中显示manufacturermodel_typeequipment_type,而不仅仅是一个可能毫无意义的序列号。如果我以错误的方式解决这个问题,请告诉我。提前致谢。

【问题讨论】:

  • 什么?那个型号是完全一样的,它仍然有一个序列号。唯一的区别在于__unicode__ 方法与查询无关。
  • 嗨,对不起,我以为是这样(仍在学习!)。当我使用相同的查询时,它会说没有匹配项,但是使用“当前”代码它可以工作。

标签: python django django-queryset


【解决方案1】:

您不必按照当前的方式执行查询集。如果您想获取属于 Detail 对象的 InstrumentAnnual 对象,您可以简单地使用 self.object.instrumental_annual(假设 self.object 是您的 Detail 对象,就像在您的示例中一样。

关于如何修复您提供的查询,您目前正在使用 InstrumentAnnual 对象的字符串表示形式检查序列号。但那不再是你的序列号了。相反,你会这样做

queryset = InstrumentAnnual.objects.get(instrument_details__serial_number = self.object.instrument_annual.serial_number, current_revision = True)

指定您实际上要检查序列号。但如前所述,不需要这个查询集,因为您可以通过self.object.instrumental_annual 轻松获取 InstrumentAnnual 对象

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 2018-12-29
    • 2017-07-01
    • 2016-05-06
    • 2019-07-23
    • 2020-11-17
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多