django城市和地方模型

时间:2016-04-19 00:23:43

标签: python django django-models

我正在开发一个房地产应用程序,我有房产,城市和地方的模型,例如

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'
    )

这就是它在管理中的外观

admin screenshot

问题是这些领域(城市和地方)都是独立的,即您可以在城市中选择伦敦并从不同的城市选择一个位置。我是django模型(或数据库)的新手,但你认为我应该在Property类中将address更改为CharField吗?这与city有什么关系?

理想情况下,我想在“城市”和“城市”中使用“Google Places API”的自动完成功能。 “位置”字段,以便用户可以从API结果中选择两者,然后将结果保存在数据库中(当代理将添加属性时)或使用所选城市/位置进行数据库搜索。

我尝试了django-google-places,但不确定如何将其合并到模型字段中,就像我想要的那样。提前致谢

1 个答案:

答案 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()