【问题标题】:Is there a way to query reverse in django models?有没有办法在 django 模型中查询反向?
【发布时间】:2020-07-22 07:18:23
【问题描述】:

我知道已经以不同的方式回答了这个问题,但我仍然无法看到清晰的画面。 我有以下具有以下关系的表格:

class Category(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)

def __str__(self):
    return self.name


class SubCategory(models.Model):
    sub_name = models.CharField(max_length=100, null=False, blank=True, default='None')
    category = models.ManyToManyField(Category, default=1)

class Product(models.Model):

    name = models.CharField(max_length=150, null=False, blank=False)
    brand = models.CharField(max_length=100, null=False, blank=False)
    price = models.FloatField(null=False, blank=False)
    weight = models.CharField(max_length=100,null=False, blank=False)

    sub_category = models.ForeignKey(SubCategory, on_delete=models.SET_DEFAULT, default=13)
    category = models.ForeignKey(Category, on_delete= models.CASCADE)

我正在尝试解决以下两个查询:

  • 将所有类别和子类别提取到指定品牌的特定类别。我正在制作的展示结构是品牌(男装->衬衫、裤子等。女装->衬衫、裤子等)。

注意:每个品牌都可以销售多个类别和子类别的产品。

  • 从Category.objects.all()的结果中获取必须取出类别名称的所有子类别。我在这里制作的显示结构是 Men(其子类别), Women(其子类别)

【问题讨论】:

    标签: python django orm


    【解决方案1】:

    让我们一步一步来

    1. 获取特定品牌的所有产品
    Product.objects.filter(brand=brand)
    
    1. 现在我们要列出这场比赛的类别。我们将获取类别的 ID
    Product.objects.filter(brand=brand).values_list("category_id", flat=True)
    
    1. 现在让我们获取对应的类别对象
    queryset = Product.objects.filter(brand=brand).values_list("category_id", flat=True)
    categories = Category.objects.filter(id__in=queryset)
    

    注意:如果你只是想获取类别名称,你可以这样做

    Product.objects.filter(brand=brand).values_list("category__name", flat=True).distinct()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      相关资源
      最近更新 更多