Как применить фильтр к форме модели Django и вернуть форму для просмотра в Django? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить сведения о пользователе в форме модели для создания объекта Service. Вместо того, чтобы возвращать всех пользователей из моего приложения учетных записей, я хотел применить пользовательский фильтр 'is_admin = False' в фильтре объектов, но он возвращает пользователейбез применения фильтра.Помогите мне добиться этого ....

forms.py

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 code

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})

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я нашел способ для этого, выбирая объекты, которые мы можем фильтровать, используя limit_choices_to в полях модели, как это ...

manager = models.ForeignKey(User, on_delete=models.PROTECT, limit_choices_to={'is_admin':False})
0 голосов
/ 27 февраля 2019

Извините за мою путаницу раньше.Но, пройдя некоторую документацию, я узнал, что внутри __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)
...