如何根据 Django 模型中的 "country" 字段拥有 "city" 字段,而不创建它们的表
how to have "city" fields depending on "country" field in Django models, without creating their tables
我知道有几个这样的问题(例如this one),但没有一个能帮助我解决问题。
我想在我的模型中有一个城市和一个国家字段,城市选择取决于国家;但是我不想将城市和国家定义为模型 类。这是我的代码:
from django.contrib.auth.models import User
from django.db import models
from django.forms import ChoiceField
from django_countries.fields import CountryField
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name="UserProfile")
name = models.CharField(max_length=30, null=False, blank=False)
picture = models.ImageField(upload_to='userProfiles/', null=False, blank=False)
date_of_birth = models.DateTimeField(null=False, blank=False)
country = CountryField()
# city = ??
national_code = models.IntegerField(max_length=10, null=False, blank=False)
email = models.EmailField()
def __str__(self):
return '{}'.format(self.user.username)
def __unicode__(self):
return self.user.username
就像字段 "country" 是 country = CountryField()
,我想知道是否有一种方法可以在不定义 class Country(models.Model)
或 class City(models.Model)
[= 的情况下完成任务17=]
唯一的方法是在模型中定义选项:
class UserProfile(models.Model):
CITIES = (
('ny', 'New York'),
('sm', 'Santa Monica')
# .. etc
)
city = models.CharField(max_length=5, choices=CITIES, blank=True)
为此,您可以使用 django-cities。
但是,这不会解决输入逻辑的问题 - 如果您需要在表单中选择国家/地区后过滤城市之类的东西。您可以为此使用 django-smart-selects,但我不确定实现 django-cities 的复杂模型结构有多容易。
我遇到了同样的问题,我使用 django-cities-light to populate the city and regions/countries and django-smart-selects 过滤结果代码是这样的,并且在管理员和表单中运行良好:
from django.db import models
from cities_light.models import City
from cities_light.models import Region
from smart_selects.db_fields import ChainedForeignKey
class Address(models.Model):
....
state = models.ForeignKey(Region, on_delete=models.CASCADE)
city = ChainedForeignKey(City, chained_field="state", chained_model_field="region")
记得将'cities_light'和'smart_selects'添加到INSTALLED_APPS。
同时添加 'smart_selects' 到 urls.
path('chaining/', include('smart_selects.urls')),
我知道有几个这样的问题(例如this one),但没有一个能帮助我解决问题。
我想在我的模型中有一个城市和一个国家字段,城市选择取决于国家;但是我不想将城市和国家定义为模型 类。这是我的代码:
from django.contrib.auth.models import User
from django.db import models
from django.forms import ChoiceField
from django_countries.fields import CountryField
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name="UserProfile")
name = models.CharField(max_length=30, null=False, blank=False)
picture = models.ImageField(upload_to='userProfiles/', null=False, blank=False)
date_of_birth = models.DateTimeField(null=False, blank=False)
country = CountryField()
# city = ??
national_code = models.IntegerField(max_length=10, null=False, blank=False)
email = models.EmailField()
def __str__(self):
return '{}'.format(self.user.username)
def __unicode__(self):
return self.user.username
就像字段 "country" 是 country = CountryField()
,我想知道是否有一种方法可以在不定义 class Country(models.Model)
或 class City(models.Model)
[= 的情况下完成任务17=]
唯一的方法是在模型中定义选项:
class UserProfile(models.Model):
CITIES = (
('ny', 'New York'),
('sm', 'Santa Monica')
# .. etc
)
city = models.CharField(max_length=5, choices=CITIES, blank=True)
为此,您可以使用 django-cities。
但是,这不会解决输入逻辑的问题 - 如果您需要在表单中选择国家/地区后过滤城市之类的东西。您可以为此使用 django-smart-selects,但我不确定实现 django-cities 的复杂模型结构有多容易。
我遇到了同样的问题,我使用 django-cities-light to populate the city and regions/countries and django-smart-selects 过滤结果代码是这样的,并且在管理员和表单中运行良好:
from django.db import models
from cities_light.models import City
from cities_light.models import Region
from smart_selects.db_fields import ChainedForeignKey
class Address(models.Model):
....
state = models.ForeignKey(Region, on_delete=models.CASCADE)
city = ChainedForeignKey(City, chained_field="state", chained_model_field="region")
记得将'cities_light'和'smart_selects'添加到INSTALLED_APPS。 同时添加 'smart_selects' 到 urls.
path('chaining/', include('smart_selects.urls')),