django自定义属性返回过滤字段

时间:2016-08-21 10:46:54

标签: python django django-models

在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,它为不同的,#34;传感器"定义字符串。 (例如BAT,ANE等)。我想拥有这样的房产:

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

我该如何做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以创建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()

答案 1 :(得分:0)

这样的事情可能是:

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