问题描述
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)