我有以下(簡化的)數據模型: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