我正在开发一个房地产应用程序,我有房产,城市和地方的模型,例如
class City(models.Model):
city = models.CharField(max_length=200)
def __str__(self):
return self.city
class Meta:
verbose_name_plural = "Cities"
class Location(models.Model):
address = models.CharField(max_length=200)
city = models.ForeignKey(City)
def __str__(self):
return self.address
class Property(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=200, verbose_name=_('Title'))
slug = models.SlugField(max_length=250, unique_for_date='publish',verbose_name=_('Slug'))
city = models.ForeignKey(City)
address = models.ForeignKey(Location)
status = models.CharField(
max_length=10,
choices=STATUS_CHOICES,
default='draft'
)
这就是它在管理中的外观
问题是这些领域(城市和地方)都是独立的,即您可以在城市中选择伦敦并从不同的城市选择一个位置。我是django模型(或数据库)的新手,但你认为我应该在Property类中将address
更改为CharField
吗?这与city
有什么关系?
理想情况下,我想在“城市”和“城市”中使用“Google Places API”的自动完成功能。 “位置”字段,以便用户可以从API结果中选择两者,然后将结果保存在数据库中(当代理将添加属性时)或使用所选城市/位置进行数据库搜索。
我尝试了django-google-places,但不确定如何将其合并到模型字段中,就像我想要的那样。提前致谢
答案 0 :(得分:0)
您只需从Property类中删除city
字段,因为其中包含城市。
要检索房产城市,您可以执行以下操作:
<强> models.py 强>
class Property(models.Model):
# *Your codes here*
# *define new method*
def get_city(self):
return self.location.city()
然后您可以在您需要的地方使用此方法:
<强> admin.py 强>
class PropertyAdmin(admin.ModelAdmin):
list_display = ['title', 'slug', 'address', get_city, 'status']
或:
>>> A = Property.objects.get(id = 1)
>>> A.get_city()