Ess*_*sex 1 django django-class-based-views
由于我正在学习 Django Class Based View(CBV) 以处理在Function Based View(FBV) 中开发的脚本,我想进行以下过程。
我想预填充一个基于self.request.GET.
这是我的课:
\n\nclass IdentitySocieteFormView(LoginRequiredMixin, CreateView) :\n\n form_class = SocieteFormulaire\n template_name = \'Identity_Societe_Form.html\'\n model = Societe\n\n def get_context_data(self, **kwargs) :\n\n data = super(IdentitySocieteFormView, self).get_context_data(**kwargs)\n\n if \'recherche\' in self.request.GET :\n\n query_Responsable = self.request.GET.get(\'Responsable\') \n Responsable = Individu.objects.filter(NumeroIdentification=query_Responsable)\n\n data[\'responsable\'] = Responsable\n\n return data\n\n def form_valid(self, form) :\n\n form.instance.Reponsable = responsable\n form.instance.Utilisateur = self.request.user.last_name + " " + self.request.user.first_name\n\n return super(IdentitySocieteFormView, self).form_valid(form)\nRun Code Online (Sandbox Code Playgroud)\n\n但我不确定这一行:form.instance.Reponsable = responsable它可以重新填充我的字段。
以前,我的脚本如下所示:
\n\n@login_required\ndef IdentitySocieteForm(request) :\n\n query_Responsable = request.GET.get(\'Responsable\') \n\n success = False\n\n if request.method == \'POST\':\n\n form = SocieteFormulaire(request.POST or None)\n\n if form.is_valid() : # V\xc3\xa9rification sur la validit\xc3\xa9 des donn\xc3\xa9es\n post = form.save()\n\n messages.success(request, \'Le formulaire a \xc3\xa9t\xc3\xa9 enregistr\xc3\xa9 !\')\n return HttpResponseRedirect(reverse(\'SocieteResume\', kwargs={\'id\': post.id}))\n\n else:\n messages.error(request, "Le formulaire est invalide !")\n\n else:\n form = SocieteFormulaire()\n\n Responsable = Individu.objects.filter(NumeroIdentification=query_Responsable)\n form.fields[\'Responsable\'].queryset = Responsable\n form.fields[\'Utilisateur\'].initial = request.user.last_name + " " + request.user.first_name\n\n return render(request, \'Identity_Societe_Form.html\', {"form" : form, "query_Responsable" : query_Responsable})\nRun Code Online (Sandbox Code Playgroud)\n\n如果您能帮助我,请提前致谢
\n\n编辑 :
\n\n我试过get_initial():
def get_initial(self):\n\n initial = super(IdentitySocieteFormView, self).get_initial()\n\n if \'recherche\' in self.request.GET :\n\n query_Responsable = self.request.GET.get(\'Responsable\')\n Responsable = Individu.objects.filter(NumeroIdentification=query_Responsable)\n initial[\'Responsable\'].queryset = Responsable\n\n return initial\nRun Code Online (Sandbox Code Playgroud)\n\n但我得到:
\n\nFile "/Users/valentinjungbluth/Desktop/Django/DatasystemsCORE/DatasystemsCore/DatasystemsCORE/Identity/views.py" in get_initial\n 227. initial[\'Responsable\'].queryset = Responsable\n\nException Type: KeyError at /Identification/Company/Form/\nException Value: \'Responsable\'\nRun Code Online (Sandbox Code Playgroud)\n\n我的 forms.py 看起来像这样:
\n\nclass SocieteFormulaire(forms.ModelForm) :\n\n Responsable = CustomLabelModelChoiceField(Individu.objects.filter(), required=False, label = "Responsable", label_func=lambda obj: \'%s %s %s\' % (obj.Nom, obj.Prenom, obj.NumeroIdentification))\n InformationsInstitution = forms.CharField(widget=forms.HiddenInput(), initial=InformationsInstitution.objects.using(\'default\').last().Ville.encode(\'utf-8\'))\n\n class Meta :\n model = Societe\n fields = [\n \'Nom\',\n \'Etat\', \n \'Adresse\', \n \'Ville\', \n \'Zip\', \n \'Region\',\n \'Pays\', \n \'Mail\',\n \'Web\',\n \'Telephone\',\n \'Fax\',\n \'SIREN\',\n \'SIRET\',\n \'NAF_APE\',\n \'RCS\',\n \'CHOIX_TVA\',\n \'TVA\',\n \'Type\',\n \'Effectif\',\n \'Domaine\', \n \'Capital\',\n \'Responsable\',\n \'InformationsInstitution\',]\nRun Code Online (Sandbox Code Playgroud)\n
小智 5
接下来是使用get-queryset 过滤 a-createview-in-a-model-in-a-createview-with-get-queryset
def get_form_kwargs(self):
kwargs = super(IdentitySocieteFormView, self).get_form_kwargs()
query_Responsable = self.request.GET.get('Responsable')
Responsable = Individu.objects.filter(NumeroIdentification=query_Responsable)
kwargs['responsable_qs'] = Responsable
u = request.user
kwargs['user_initial'] = '{lname} {fname}'.format(lname=u.last_name, fname=u.first_name)
return kwargs
Run Code Online (Sandbox Code Playgroud)
通知
class SocieteFormulaire(forms.ModelForm):
def __init__(self, *args, **kwargs):
user_initial = kwargs.pop('user_initial', None)
responsable_qs = kwargs.pop('responsable_qs', None)
super(SocieteFormulaire, self).__init__(*args, **kwargs)
self.fields['Responsable'].queryset = responsable_qs
self.fields['InformationsInstitution'].initial = user_initial
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2002 次 |
| 最近记录: |