Django:过滤多对多关系并且必须包含父级

问题描述 投票:0回答:0

如果用户选择产品子类别为私家车,选择州为安达曼和尼科巴群岛,我只想显示那些在产品子类别和州中都匹配的唯一RTO。

查看:

product_sub_cat_data = ProductSubCategory.objects.filter(
            product_sub_category=selected_sub_product_array[2].strip(),
            product=product_data[0].id
            )
        state_data = State.objects.filter(state=selected_state)
        rto_grouping_data = RtoGrouping.objects.filter(
                            product_sub_category=product_sub_cat_data[0].id,
                            group__rto_state=state_data[0].id).distinct()

获取输出为:

AN01、AN02、DD02、DD03、LD01、PY01、PY02、PY03、PY04、UP14、UP16、DN09、UP61、DD09、UP05、UP07、UP10、UP06、UP08、UP04、UP09、DN13、UP38、LD02 ,LD03 , LD04, LD05, LD07, LD08, LD09, PY05

虽然期望的输出是:

AN01、AN02

(因为只有这2个RTO属于安达曼和尼科巴群岛)

我的4个型号:

class ProductSubCategory(models.Model):
    product_sub_category = models.CharField(max_length=256)
    product = models.ForeignKey(Product, on_delete=models.PROTECT)

class RtoGrouping(models.Model):
    insurer = models.ForeignKey(Company, null=True, 
              on_delete=models.PROTECT)
    group_name = models.CharField(max_length=256)
    group = models.ManyToManyField(Rto, related_name='group')
    product_sub_category = models.ForeignKey(ProductSubCategory, 
                           on_delete=models.PROTECT)

class Rto(models.Model):
    rto = models.CharField(unique=True, max_length=10)
    rto_state = models.ForeignKey(
        State, on_delete=models.PROTECT, related_name='rto_city')

class State(models.Model):
    state = models.CharField(max_length=100, unique=True)
python django many-to-many
© www.soinside.com 2019 - 2024. All rights reserved.