Django自定义属性返回筛选字段

2024-04-20 03:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

在django应用程序中,使用现有数据库,我使用inspectdb构建了一个模型:

  class Sensorparser(models.Model):
      """ a read-only implemenation to access the MeshliumDB """
      id_wasp = models.TextField(blank=True, null=True)
      id_secret = models.TextField(blank=True, null=True)
      frame_type = models.IntegerField(blank=True, null=True)
      frame_number = models.IntegerField(blank=True, null=True)
      sensor = models.TextField(blank=True, null=True)
      value = models.TextField(blank=True, null=True)
      timestamp = models.DateTimeField()
      raw = models.TextField(blank=True, null=True)
      parser_type = models.IntegerField()

      def save(self, *args, **kwargs):
          return

      def delete(self, *args, **kwargs):
          return

      class Meta:
          managed = False
          db_table = 'sensorParser'

我添加了savedelete方法,因为这应该是一个只读模型。你知道吗

其中一个字段是sensor,它为不同的“传感器”(如BAT、ANE等)定义字符串。我想拥有这样的房产:

@property
def battery()
    return self.sensor.objects.filter(sensor='BAT')

我怎样才能做到这一点?你知道吗


Tags: 模型selfidtruereturnmodelsdeftype
2条回答

您可以创建custom manager

class BatteryManager(models.Manager):
    def get_queryset(self):
        return super(BatteryManager, self).get_queryset().filter(sensor='BAT')

class Sensorparser(models.Model):
    batteries = BatteryManager()
    # etc

像这样使用:

batteries = Sensorparser.batteries.all()

可能是这样的:

def _get_battery(self):
    return self.sensor.objects.filter(sensor='BAT')
battery = property(_get_battery)

相关问题 更多 >