В дополнение к ответу С.Лотта и, как упоминается в комментариях к Guru, его можно добавить фильтры выбора запроса, переопределив функцию ModelForm.__init__
. (Это может быть легко применимо к обычным формам), это может помочь в повторном использовании и сохраняет функцию обзора в порядке.
class ClientForm(forms.ModelForm):
def __init__(self,company,*args,**kwargs):
super (ClientForm,self ).__init__(*args,**kwargs) # populates the post
self.fields['rate'].queryset = Rate.objects.filter(company=company)
self.fields['client'].queryset = Client.objects.filter(company=company)
class Meta:
model = Client
def addclient(request, company_id):
the_company = get_object_or_404(Company, id=company_id)
if request.POST:
form = ClientForm(the_company,request.POST) #<-- Note the extra arg
if form.is_valid():
form.save()
return HttpResponseRedirect(the_company.get_clients_url())
else:
form = ClientForm(the_company)
return render_to_response('addclient.html',
{'form': form, 'the_company':the_company})
Это может быть полезно для повторного использования, если у вас есть общие фильтры, необходимые для многих моделей (обычно я объявляю абстрактный класс формы). Например,
class UberClientForm(ClientForm):
class Meta:
model = UberClient
def view(request):
...
form = UberClientForm(company)
...
#or even extend the existing custom init
class PITAClient(ClientForm):
def __init__(company, *args, **args):
super (PITAClient,self ).__init__(company,*args,**kwargs)
self.fields['support_staff'].queryset = User.objects.exclude(user='michael')
Кроме этого, я просто переписываю материал блога Django, из которого есть много хороших.
«Экземпляр» обычно - «методы экземпляра», «переменные экземпляра» и т. Д. Нестатические тоже работают, если вы находите это проще.
Я не уверен, что действительно поместил бы все эти регионы в ...
Нестатический будет правильным. Слово «экземпляр» чаще используется для описания конкретного вхождения объекта или класса в памяти.