В приложении Джанго, с существующей базой данных, я использовал 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
def battery()
return self.sensor.objects.filter(sensor='BAT')
Как это сделать?
И обобщать это немного больше? Ниже не работает: класс 'SensorManager (models.Manager): Защиту get_queryset (самость, датчик):. возвращение супер (SensorManager, самость) .get_queryset() фильтр (датчик = датчик) ' – John
Да он не работает. Вы можете создать много менеджеров для разных типов датчиков и использовать их. Или, если у вас много типов датчиков, вы можете написать собственный метод в менеджере: 'class SensorparserManager (models.Manager): def filter_by_sensor (self, sensor): return self.get_queryset(). Фильтр (датчик = датчик) класс Sensorparser (models.Model): objects = SensorparserManager() 'И используйте его так:' Sensorparser.objects.filter_by_sensor ('BAT') ' –