この 記事に従って、1 つのフィールドにつき 2 つの列を作成したので、カスタム フィールド コードは次のようになります。
class GeopositionField(models.Field):
description = "A geoposition (latitude and longitude)"
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 42
super(GeopositionField, self).__init__(*args, **kwargs)
def contribute_to_class(self, cls, name):
self.name = name
position_longitude = DecimalField(decimal_places=6,max_digits=9,default=0,blank=True)
cls.add_to_class("position_longitude",position_longitude)
position_latitude = DecimalField(decimal_places=6,max_digits=8,default=0,blank=True)
cls.add_to_class("position_latitude",position_latitude)
setattr(cls,"position_longitude",position_longitude)
setattr(cls,"position_latitude",position_latitude)
そして私のモデルクラスはRequestです:
class Request(models.Model):
person = models.ForeignKey(Person)
position = GeopositionField(null = False,default = 0)
(私はdjango-geopositionを変更しています)これまで、テーブルにはposition_latitudeとposition_longitudeしかありませんでした(元のような「位置」だけではありません)
前
+--------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| person_id | int(11) | NO | MUL | NULL | |
| creation_date | datetime | NO | | NULL | |
| position | varchar(50) | NO | | NULL | |
+--------------------+---------------+------+-----+---------+----------------+
後
+--------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| person_id | int(11) | NO | MUL | NULL | |
| creation_date | datetime | NO | | NULL | |
| position_longitude | decimal(9,6) | NO | | NULL | |
| position_latitude | decimal(8,6) | NO | | NULL | |
+--------------------+---------------+------+-----+---------+----------------+
それは良いことですが、「リクエスト」オブジェクトを作成してから「位置」属性を出力しようとすると、「位置」属性が「しない」というエラーが表示されるため、問題はdjango管理者とシェルにも発生します。 t が存在する:
>>> from main.models import Request
>>> x = Request()
>>> x.position
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Request' object has no attribute 'position'
>>>
__init__
Request クラスのメソッドにposition 属性を設定すれば動きますが、それは考えではありません。
したがって、実際の問題に戻って、管理パネルに表示しようとすると、「位置」フィールドを明示的に呼び出すと、django がエラーをスローします。不思議なことに、「位置緯度」と「位置経度」で動作します。
class RequestAdminForm(forms.ModelForm):
class Meta:
model = Request
# fields = ['position_latitude','position_longitude] <-- this works !
fields = ['position'] # <-- this returns error = Unknown field(s) (position) specified for Request
RequestAdminForm のフィールド リストに「位置」しかない場合に、「位置緯度」と「位置経度」を表示する方法はありますか? それが私が達成したいことです。「未定義属性」の問題が発生するのはなぜですか?