Django-Filter:使用与当前用户相关的查询集的ModelChoiceFilter

时间:2018-04-28 23:22:06

标签: python django django-filter

我正在使用Django-Filter库。

我有2个模型,ListingListingReview。我希望能够为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参数,例如根据当前用户动态定义查询集。由于每个用户都拥有一组不同的列表。

3 个答案:

答案 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)

我不明白您的问题是什么,但是您的想法,尤其是您的问题解决了我的问题。换句话说,我所做的事情与您所做的完全相同,并且对我有用。