将具有特定属性的自定义用户添加到“朋友”列表

问题描述

我实现了将用户从整个用户列表添加到“朋友列表”的逻辑。

models.py

class vendorList(models.Model):
    users = models.ManyToManyField(User)
    current_user = models.ForeignKey(User,related_name='owner',on_delete=models.SET_NULL,null=True)

    @classmethod
    def add_vendor(cls,current_user,new_vendor):
        vendor,created = cls.objects.get_or_create(
            current_user=current_user
        )
        vendor.users.add(new_vendor)

    @classmethod
    def remove_vendor(cls,created = cls.objects.get_or_create(
            current_user=current_user
        )
        vendor.users.remove(new_vendor)

views.py

class vendorListView(TemplateView):
    template_name = 'event/vendor_list.html'

    def get(self,request):
        #form = EventItemmodelForm()
        users = User.objects.exclude(id=request.user.id)
        vendor = vendorList.objects.get(current_user=request.user)
        vendors = vendor.users.all()

        args = {
            #'form': form,'users': users,'vendors': vendors
        }
        return render(request,self.template_name,args)

def change_vendor_list(request,operation,pk):
    vendor = User.objects.get(pk=pk)
    if operation == 'add':
        vendorList.add_vendor(request.user,vendor)
    elif operation == 'remove':
        vendorList.remove_vendor(request.user,vendor)
    return redirect('/vendors/')

它可以工作并提供我可以添加到列表中的所有用户的列表。但是,我需要过滤此“整个”列表并仅显示具有 is_vendor 属性(类似于is_staff)的用户。 在模型或视图中应该在哪里过滤用户?我尝试过

vendors = vendor.users.filter(is_vendor=True)

不起作用。

解决方法

我发现有一个可供选择的过滤列表。我不需要像这样过滤 is_vendor ,而是使用 vendor

vendors = vendor.users.filter(vendor=True)