我有一個模型,該模型從一個表中一個數據庫中檢索數據,以及檢索其他兩個表數據另外兩個模型(Streets
和Cities
)。所有這些信息都需要從LandVehicle
模型中獲取。我在計算如何從其他表格中檢索數據到LandVehicle
模型中的屬性時遇到了一些問題。下面是階級結構我的工作:模型屬性返回空
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'
我不一定得到它的成立,現在的方式錯誤,但在訪問視圖中的數據,如vehicle.streets
,如果vehicle
是LandVehicle
的實例只是一個空變量。
我明白,我需要解析的數據,一旦我能找回它,但現在它似乎並沒有被檢索任何東西(不能爲它打印出來東西要麼)。
編輯/更新:
通過添加self
參數,每個屬性(上述改變),我收到一個錯誤:
Cannot resolve keyword 'streets' into field. Choices are: id, lat, lon, name
至少我得到了一些錯誤,現在,但我仍然不確定如何訪問屬性。
通過空的變量,你的意思是'None'?嘗試在那裏放置一些'print'來查看代碼是否被執行。此外,代碼看起來很奇怪 - 你的方法在任何地方都缺少「self」(作爲第一個參數)。 – yedpodtrzitko
@yedpodtrzitko如果我嘗試在屬性中打印文本到控制檯(例如在「streets()'屬性中打印」Test「),它會起作用,所以它似乎被執行,但如果我在屬性到一個變量和打印,沒有什麼打印到控制檯。我已將缺少的'self'參數添加到每個屬性中,並更新了有關該錯誤的更多信息。 – swiftsly