我正在努力解决给定的情况。我有以下模型:
class Location(models.Model):
COUNTRY = 1
REGION = 2
region_type_choices = ((COUNTRY, 'country'),
(REGION, 'region'))
name = models.CharField(max_length=120, blank=False)
country_code = models.CharField(max_length=10, blank=False)
region = models.CharField(max_length=10, choices=region_type_choices)
is_recommended = models.BooleanField(default=False)
countries = models.ForeignKey('Location', related_name='related_countries',
on_delete=models.DO_NOTHING)
我在这里要实现的是:如果要添加的Region实例的区域属性设置为country,并且只能将新对象添加到countries关系中,并且基本实例设置为region。
例如:
country = Location(name='test', region=1)
region = Location(name='test2', region=2)
region2 = Location(name='test3', region=2)
region.related_countries.add(country) <-- this is valid
country.related_countries.add(region) <-- this is invalid
region.related_countries.add(region2) <-- this is also invalid
在Django中使用单个表是否有可能实现?我已经尝试覆盖post_save并保存信号,但这似乎没有用。
我将不胜感激。
我认为您可以更轻松地将位置分为三个模型:
class Location(models.Model):
name = models.CharField(max_length=120, blank=False)
is_recommended = models.BooleanField(default=False)
class Meta:
abstract = True
class Country(Location):
pass
class Region(Location):
countries = models.ManyToManyField('Country', related_name='regions', blank=True)
country = Country(name='test')
region = Region(name='test2')
region2 = Region(name='test3')
country.regions.set([region, region2])