首页 文章

返回多个字段时的Django Query

提问于
浏览
1

我有一个模型,我想将 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 - 仪器应用:查询

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

NOTE: ' InstrumentAnnual ' model has a foreign key to ' Details ' model called ' 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 .

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

1 回答

  • 0

    您不必像当前那样执行查询集 . 如果要获取属于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对象 .

相关问题