Ich habe ein Modell, das Daten aus einer Tabelle in einer Datenbank abruft, und zwei andere Modelle (Streets
und Cities
), die Daten aus zwei anderen Tabellen abrufen. All diese Informationen müssen vom Modell LandVehicle
abgerufen werden. Ich habe einige Probleme herauszufinden, genau wie die Daten aus den anderen Tabellen in die Eigenschaften im LandVehicle
Modell abrufen. Unten ist die Klassenstruktur mit arbeite ich:Modelleigenschaften, die leer sind
class Vehicle(models.Model):
name = models.CharField(max_length=500)
lat = models.DecimalField(max_digits=15,decimal_places=6)
lon = models.DecimalField(max_digits=15,decimal_places=6)
radius = Decimal(.06)
@abstractproperty
def streets(self):
pass
@abstractproperty
def cities(self):
pass
@cached_property
def nearby_vehicles(self):
return Vehicle.objects.filter(lat__range=[self.lat - 2, self.lat + 2], lon__range=[self.lon - 2, self.lon + 2])
# Meta
class Meta:
abstract = True
class LandVehicle(Vehicle):
@property
def streets(self):
name_substr = self.name
if " " in name_substr:
name_substr = name_substr[:name_substr.index(" ")]
return LandVehicle.objects.filter(Q(streets__name__contains=self.name) |
Q(streets__name__contains=name_substr) |
(Q(streets__lat__range=[self.lat - self.radius, self.lat + self.radius]) &
Q(streets__lon__range=[self.lon - self.radius, self.lon + self.radius])))
@property
def cities(self):
name_substr = self.name
if " " in name_substr:
name_substr = name_substr[:name_substr.index(" ")]
return LandVehicle.objects.filter(Q(cities__name__contains=self.name) |
Q(cities__name__contains=airport_name_substr) |
(Q(cities__lat__range=[self.lat - self.radius, self.lat + self.radius]) &
Q(cities__lon__range=[self.lon - self.radius, self.lon + self.radius])))
# Meta
class Meta:
db_table = 'landvehicles'
class Streets(models.Model):
# Meta
class Meta:
db_table = 'streets'
class Cities(models.Model):
# Meta
class Meta:
db_table = 'cities'
muß ich einen Fehler nicht aus dem Weg es jetzt eingerichtet ist, aber die Daten in der Ansicht, wie vehicle.streets
zugreifen, wenn vehicle
eine ist Instanz von LandVehicle
, ist nur eine leere Variable.
Ich verstehe, dass ich die Daten analysieren muss, sobald ich es abrufen kann, aber im Moment scheint es nichts abzurufen (kann auch nichts ausdrucken).
Bearbeiten/Update:
den self
Parameter an jede der Eigenschaften (geändert oben) Durch das Hinzufügen, erhalte ich eine Fehlermeldung:
Cannot resolve keyword 'streets' into field. Choices are: id, lat, lon, name
Wenigstens habe ich eine Art von Fehler bekommen , aber ich weiß immer noch nicht, wie ich auf die Eigenschaften zugreifen soll.
durch leere Variable, die Sie bedeuten 'None'? Versuchen Sie, einige '' '' '' '' '' '' '' '' ''zu drücken, um zu sehen, ob der Code überhaupt ausgeführt wird. Auch der Code sieht komisch aus - Ihren Methoden fehlt "self" (als erster Parameter) überall. – yedpodtrzitko
@yedpodtrzitko Wenn ich versuche, Text auf der Konsole innerhalb der Eigenschaften zu drucken (z. B. "Test" in der 'streams()' Eigenschaft), funktioniert es, so scheint es ausgeführt werden, aber wenn ich die Abfrage innerhalb der zuweisen Eigenschaft auf eine Variable und drucken, dass nichts auf die Konsole druckt.Ich habe die fehlenden 'self' Parameter zu jeder der Eigenschaften hinzugefügt und den Beitrag mit weiteren Informationen über den Fehler aktualisiert. – swiftsly