私はデータベース内のあるテーブルからデータを取得するモデルと、2つの他のテーブルからデータを取得する2つの他のモデル(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
がある場合、私は必ずしも、そのようvehicle.streets
として、それは今でセットアップされた道からのエラーを取得しますが、ビュー内のデータにアクセスしないでくださいLandVehicle
のインスタンスは、空の変数に過ぎません。
データを取得できたら解析する必要があると思いますが、今は何も取得していないようです(どちらも印刷できません)。
編集/更新:少なくとも私は今、エラーのいくつかの並べ替えを取得
Cannot resolve keyword 'streets' into field. Choices are: id, lat, lon, name
:
(上記の変更)の各プロパティにself
パラメータを追加することにより、私はエラーが表示されますしかし、私はまだプロパティにアクセスする方法がわかりません。
空の変数によって、あなたは 'NONE'を意味ですか?コードが実行されたかどうかを確認するために 'print'sをいくつか入れてみてください。また、コードが奇妙に見えます - あなたのメソッドにはどこでも 'self'が(最初のパラメータとして)欠けています。 – yedpodtrzitko
@yedpodtrzitkoプロパティの中でコンソールにテキストを印刷しようとすると( 'streets()'プロパティの "Test"のように)、動作しているように見えますが、プロパティを変数に追加し、それを印刷します。何もコンソールには何も表示されません。私は不足している 'self'パラメータを各プロパティに追加し、エラーの詳細をいくつか追加して投稿を更新しました。 – swiftsly