【发布时间】:2014-03-30 12:05:38
【问题描述】:
我正在尝试在模型表单中使用模型属性,例如字段,但到目前为止还没有任何运气。结果是表单只呈现模型字段,而不是我定义的属性。知道如何让表单识别添加到模型中的属性吗?我希望看到纬度属性作为表单中的另一个字段添加。
Models.py:
class Plot(models.Model):
plot_id = models.AutoField(primary_key=True)
plot_number = models.IntegerField(validators=[MinValueValidator(1)], null=False, unique=True)
geometry = models.PointField(srid=2163, null=True, blank=True)
objects = models.GeoManager()
@property
def latitude(self):
self.geometry.transform(4326)
return self.geometry.y
@latitude.setter
def latitude(self, latitude):
self.geometry.y = latitude
Forms.py:
class InventoryPlotForm(ModelForm):
class Meta:
model = ForestInventoryPlot
exclude = {"geometry"}
【问题讨论】:
-
与您的问题无关,但请注意
exclude = {"geometry"}定义了一个set,这技术上不是Meta.exclude属性的错误值,而是一种-奇怪和意想不到的。 -
我简化了表格和模型以使我的观点更加清晰。在这样做时,我没有意识到这一点。感谢您指出。
-
查看 GeoDjango 的 forms api,它提供了您可以使用的字段。由于它是一个属性,因此您需要为其创建自己的字段。
-
Burhan,一旦我在纬度上分割几何字段,我创建的字段就不是点几何。那时纵坐标只是一个小数,所以我不相信点域会帮助我。不过,您需要为表单创建一个新字段是正确的,感谢您的帖子。