如何将过滤器应用于Django模型并返回表单以在Django中查看?

问题描述 投票:0回答:2

我试图以模型形式获取用户详细信息以创建Service对象。我不想从我的帐户应用程序返回所有用户,我想在对象过滤器中应用自定义过滤器'is_admin = False'但它返回用户而不应用过滤器。帮助我实现这个目标....

forms.朋友

from django import forms
from .models import Service
from accounts.models import User

class AddServiceForm(forms.ModelForm):
    class Meta:
        model = Service
        fields = ['service','title','manager','serviceMobile','alternateMobile',
                  'latitude','longitude','city','street','landmark','keywords']

    def __init__(self, user, *args, **kwargs):
        super(AddServiceForm, self).__init__(*args, **kwargs)
        self.fields['manager'].queryset = User.objects.all().filter(is_admin=False)

views.py代码

class AddService(LoginRequiredMixin, LogoutIfNotAdminMixin, CreateView):
    login_url = reverse_lazy('mlogin')
    permission_required = 'is_staff'

    def post(self, request, *args, **kwargs):
        context={}
        context['city'] = City.objects.all()
        if request.method == 'POST':
            form = AddServiceForm(request.POST)
            if form.is_valid:
                form.save()
                return redirect('servicedata')
        else:
            form = AddServiceForm()
        return render(request, 'aapp/locations/service/uservicedata.html', {'form': form, 'context': context})
django django-2.0
2个回答
0
投票

对不起我之前的困惑。但经过一些文档后,我才知道在__init__方法中,super应该在self.fields之后使用。

所以你的改变应该是这样的:

def __init__(self, user, *args, **kwargs):
    self.fields['manager'].queryset = User.objects.all().filter(is_admin=False)
    super(AddServiceForm, self).__init__(*args, **kwargs)

0
投票

我在获取对象的过程中找到了这种方法,我们可以在模型字段中使用limit_choices_to进行过滤...

manager = models.ForeignKey(User, on_delete=models.PROTECT, limit_choices_to={'is_admin':False})
© www.soinside.com 2019 - 2024. All rights reserved.