代码之家  ›  专栏  ›  技术社区  ›  barciewicz

Django数据库:如何根据其他对象的字段筛选对象?

  •  1
  • barciewicz  · 技术社区  · 6 年前

    在下面的代码中,如何过滤 capital_listings 那么,只为首都城市返回上市?还有,有没有可能去掉中间产物 capitals_names 名单?

    capitals = City.objects.filter(status='capital')
    capitals_names = [capital.name for capital in capitals]
    capital_listings = Listing.objects.filter #???
    

    模型:

    class Listing(models.Model):
        city = models.CharField(max_length = 30, default = 'placeholder')
        date_added = models.DateTimeField()
    
        def __str__(self):
            return self.name
    
    class City(models.Model):
        name = models.CharField(max_length = 30, default = 'placeholder')
        status = models.CharField(max_length = 30, default = 'placeholder')
    
        def __str__(self):
            return self.name
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Håken Lid    6 年前

    如果你改变 Listings.city

    class City(models.Model):
        name = models.CharField(max_length = 30, default = 'placeholder')
        status = models.CharField(max_length = 30, default = 'placeholder')
    
    class Listing(models.Model):
        city = models.ForeignKey(City, on_delete=models.CASCADE)
    
    
    capital_listings = Listing.objects.filter(city__status='capital')
    

    文档中对此进行了解释:

    https://docs.djangoproject.com/en/2.1/topics/db/queries/#lookups-that-span-relationships

        2
  •  2
  •   Gevorg Davoian    6 年前
    capital_listings = Listing.objects.filter(city__in=capital_names)