如何从列表中检索具有相同外键的元素?

时间:2013-09-16 10:30:09

标签: python django

我有这两个型号:

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

2 个答案:

答案 0 :(得分:1)

这将返回list_cities中每个城市的国家/地区ID列表:

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)

答案 1 :(得分:0)

这与执行简单的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:
     #...