我正在使用Django-Filter库。
我有2个模型,Listing
和ListingReview
。我希望能够为ListingReview模型创建一个过滤器,以便人们可以选择他们想要查看哪些列表。
# models.py:
class Listing(models.Model):
posted_by = models.ForeignKey('auth.User', related_name='listings', on_delete=models.CASCADE)
class ListingReview(models.Model)
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='listing_reviews')
# filters.py
def listings(request):
# if request is None:
# return Listing.objects.none()
return Listing.objects.filter(posted_by=request.user)
class ListingReviewFilter(django_filters.FilterSet):
listing = django_filters.ModelChoiceFilter(
name='listing', lookup_expr='isnull',
empty_label='All listings',
queryset=listings,
)
class Meta:
model = ListingReview
fields = ['listing']
但是,我不明白为什么request is None
,我得到:
'NoneType'对象没有属性'user'
我需要什么:
对于给定的user
,使用以下内容查找关联的列表:Listing.objects.filter(posted_by=user)
并将其传递给过滤器中的queryset
参数,例如根据当前用户动态定义查询集。由于每个用户都拥有一组不同的列表。
答案 0 :(得分:0)
当您尝试调用此方法时,您是否在客户端的请求中发送了参数user
?
答案 1 :(得分:0)
如何使用自定义过滤器method
class ListingReviewFilter(django_filters.FilterSet):
listing = django_filters.ModelChoiceFilter(
name='listing',
lookup_expr='isnull',
empty_label='All listings',
queryset=Listing.objects.all(),
method='filter_listing',
)
class Meta:
model = ListingReview
fields = ['listing']
def filter_listing(self, queryset, name, value):
return queryset.filter(posted_by=self.request.user)
答案 2 :(得分:0)
我不明白您的问题是什么,但是您的想法,尤其是您的问题解决了我的问题。换句话说,我所做的事情与您所做的完全相同,并且对我有用。