Python 如何从列表中检索具有相同外键的元素?
我有这两种型号:Python 如何从列表中检索具有相同外键的元素?,python,django,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)
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)
我的请求中有一个城市列表。POST
(作为城市ID的字符串串联):
对于上面列表中的每个
城市id
,都有一个国家/地区的外键。是否有一种简单的方法来验证城市列表是否在同一个国家(即具有相同的外键“城市/国家
”)?这将返回城市列表中每个城市的国家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)
这将返回列表城市中每个城市的国家/地区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)
这与执行简单的distinct()。因此,您可以获取值列表并将其转换为一个集合,该集合的长度应仅为1:
country_set = set(City.objects.filter(id__in=list_cities).values_list('city_country', flat=True))
if len(country_set) == 1:
#...
这与执行简单的distinct()。因此,您可以获取值列表并将其转换为一个集合,该集合的长度应仅为1:
country_set = set(City.objects.filter(id__in=list_cities).values_list('city_country', flat=True))
if len(country_set) == 1:
#...