【发布时间】:2021-08-28 17:52:17
【问题描述】:
我正在使用 Django。我创建了 3 个模型:类别、特征、问题。
class Category(models.Model):
category_name = models.CharField(max_length=300)
category_order = IntegerRangeField(default=0, min_value=0)
category_visible = models.BooleanField(default=True)
def __str__(self):
return self.category_name
class Meta(object):
ordering = ['category_order']
class Feature(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
feature_name = models.CharField(max_length=300)
feature_code = models.CharField(max_length=50, unique=True)
feature_predictable = models.BooleanField(default=False)
def __str__(self):
return self.feature_name
class Question(models.Model):
feature = models.ForeignKey(Feature, on_delete=models.CASCADE, unique=True)
question_order = IntegerRangeField(default=0, min_value=0)
question_text = models.CharField(max_length=300)
question_visible = models.BooleanField(default=True)
def __str__(self):
return self.question_text
class Meta(object):
ordering = ['question_order']
我想编写一个函数,它将返回一个类别列表,其中 category_visible == True 并且该类别中至少一个 Feature 模型实例的 feature_predictable 的值为 True,并且对于至少一个 Question question_visible = = 真。
目前,我设法创建了这样的东西:
category_queryset = category_queryset.filter(category_visible=True)
category_ids = []
for category in category_queryset:
for feature in category.feature_set.all():
if feature.feature_predictable is not True:
continue
for question in feature.question_set.all():
if question.question_visible is not True:
continue
if category.id not in category_ids:
category_ids.append(category.id)
return Category.objects.all().filter(id__in=category_ids)
但这可能不是最有效的方法。怎么写比较好?提前感谢您的帮助。
【问题讨论】:
标签: python django filter model django-queryset