In einer django app, mit einer bestehenden Datenbank, die ich benutzt habe inspectdb
ein Modell zu bauen:django benutzerdefinierte Eigenschaft Rückgabefeld gefiltert
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'
ich hinzugefügt, um die save
und delete
Methoden, weil dies ein Lese sein soll - nur Modell.
Eines der Felder ist sensor
, das Strings für verschiedene, gut, "Sensoren" (z. B. BAT, ANE, etc.) definiert. Ich möchte eine Eigenschaft wie folgt haben:
@property
def battery()
return self.sensor.objects.filter(sensor='BAT')
Wie kann ich das erreichen?
Und es ist ein bisschen mehr zu verallgemeinern? Die folgende funktioniert nicht: 'Klasse Sensormanager (models.Manager): def get_queryset (self, Sensor). return Super (Sensormanager, Selbst-) .get_queryset() Filter (Sensor = Sensor) ' – John
Ja es funktioniert nicht. Sie können viele Manager für verschiedene Sensortypen erstellen und verwenden. Oder wenn Sie viele Sensortypen haben, können Sie eine benutzerdefinierte Methode im Manager schreiben: 'class SensorparserManager (models.Manager): def filter_by_sensor (self, sensor): zurückgeben self.get_queryset(). Filter (sensor = sensor) class Sensorparser (models.Model): objects = SensorparserManager() 'Und benutze es so 'Sensorparser.objects.filter_by_sensor (' BAT ')' –