1

我有这两个模型:

class Country(models.Model):
    country_id = models.CharField(max_length=30,primary_key=True)
    country_name = models.CharField(max_length=255)

class City(models.Model):
    city_id = models.CharField(max_length=30,primary_key=True)
    city_name = models.CharField(max_length=255)
    city_country = models.ForeignKey(Country)

我有一个城市列表request.POST(作为城市ID的字符串连接):

list_cities = concat_ids.split(',')

对于上面列表中的每一个city_id,都有一个国家的外键。有没有一种简单的方法来验证城市列表是否在同一个国家(即具有相同ForeignKey的' city_country')?

4

2 回答 2

1

这将返回每个城市的国家 ID 列表list_cities

country_ids = City.objects.values_list('city_country_id', flat=True).filter(id__in=list_cities)

然后,检查列表中的所有元素是否相同:

country_ids.count(country_ids[0]) == len(country_ids)
于 2013-09-16T10:36:19.520 回答
0

这与做一个 simple 相同distinct().count(),但是,distinct并非在每个数据库中都有效(参见distinct()中的注释)。所以你可能会得到值列表并将其转换为一个集合,它的长度应该只有 1:

country_set = set(City.objects.filter(id__in=list_cities).values_list('city_country', flat=True))
if len(country_set) == 1:
     #...
于 2013-09-16T12:20:09.683 回答