【问题标题】:django model for city and places城市和地方的 django 模型
【发布时间】:2016-04-19 00:23:43
【问题描述】:

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

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,但不确定如何将其合并到我想要的模型字段中。在此先感谢

【问题讨论】:

  • 在 Property 模型中,您不需要将 City 设置为外键,因为它已经通过 Location 外键引用到城市

标签: python django django-models


【解决方案1】:

您可以简单地从您的 Property 类中删除 city 字段,因为 location 中包含城市。

要检索属性城市,您可以执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2012-03-29
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多