我正在尝试以模型形式获取用户详细信息以创建一个Service
对象。我不想在我的帐户应用中返回所有用户,而是希望在对象过滤器中应用自定义过滤器'is_admin = False',但这是返回用户而未应用过滤器。帮助我实现这一目标。...
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)
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})
答案 0 :(得分: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)
答案 1 :(得分:0)
我找到了这样的方式,同时可以在这样的模型字段中使用 limit_choices_to 来获取可以过滤的对象...
manager = models.ForeignKey(User, on_delete=models.PROTECT, limit_choices_to={'is_admin':False})