Skip to main content
 首页 » 编程设计

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

2024年08月22日31arxive

在 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' 

我添加了 save 和 delete 方法,因为这应该是一个只读模型。

其中一个字段是 sensor,它为不同的“传感器”(例如 BAT、ANE 等)定义了字符串。我想要这样的属性(property):

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

我怎样才能做到这一点?

请您参考如下方法:

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