我有以下(简化的)数据模型:Django的过滤对象
class Article(Model):
uuid = models.CharField(primary_key=True, max_length=128)
class Attribute(Model):
uuid = models.CharField(primary_key=True, max_length=128)
article = models.ForeignKey(Article, related_name='attributes')
type = models.CharField(max_length=256)
value = models.CharField(max_length=256)
一个示例用法是与连接到它与type="brand"
和value="Nike"
一个属性的制品。现在我想编写一个可以获得某品牌所有文章的API,但我似乎无法为其编写过滤器。这是我到目前为止:
class PhotobookFilter(df.FilterSet):
brand = df.CharFilter(method='filter_brand')
class Meta:
model = Article
def filter_brand(self, queryset, name, value):
return queryset.filter('order__attributes')
class PhotobookViewSet(AbstractOrderWriterViewSet):
queryset = Article.objects.all()
serializer_class = ArticlePhotobookSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = PhotobookFilter
与queryset.filter
的行显然不正确呢。我需要在这里创建一个过滤器,返回包含属性为type="brand"
和value=value
的所有文章。我将如何做到这一点?
这不起作用,因为'Article'上没有字段叫'attribute'。它返回错误:'关系字段不支持嵌套查找。有一个名为'attributes'的字段,我需要使用此类型 - 值组合过滤至少存在一个属性的所有文章。 PS将两者分开会更加困难,因为我还需要在另一个类型 - 值组合上进行过滤,而在手头,我需要的类型是预定义的。 – physicalattraction
好的,我没有在你的领域发现'related_name'。是的,如果你觉得这样,你可以很难编码过滤部分(见更新的例子)。如果不知道所有要求,很难猜测究竟有什么意义。祝你好运。 – arie