在Django formview中传递表单实例

2024-09-29 01:19:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个forms.py文件

class SocialMediaForm(forms.ModelForm):
    class Meta:
        model = SocialMedia
        fields = "__all__"
        exclude = ("doctor",)
        labels = {}
        widgets = {
            "whatsapp": forms.TextInput(attrs={"class": "form-control"}),
            "telegram": forms.TextInput(attrs={"class": "form-control"}),
            "facebook": forms.TextInput(attrs={"class": "form-control"}),
            "instagram": forms.TextInput(attrs={"class": "form-control"}),
            "linkedin": forms.TextInput(attrs={"class": "form-control"}),
        }

使用view.py文件

class SocialMediaProfile(FormView):
    model = DoctorSocialMedia
    form_class = SocialMediaForm
    success_url = "."
    template_name = "doctor/social_media_profile.html"

问题是如何将表单实例作为SocialMediaForm(instace=someInstance) # in fun based views传递给FormView视图中的模板


Tags: 文件pyformmodelformstextinputattrsmeta
1条回答
网友
1楼 · 发布于 2024-09-29 01:19:48

要更新模型实例,理想情况下应使用^{}

from django.views.generic.edit import UpdateView

class SocialMediaProfile(UpdateView):
    model = DoctorSocialMedia
    form_class = SocialMediaForm
    success_url = "."
    template_name = "doctor/social_media_profile.html"

如果URL被命名为pkslug,则这将自动从URL传递的关键字参数中获取实例。如果在url中将slug_url_kwargpk_url_kwarg以不同的名称传递给视图,则可以设置它们

如果确实需要将自己的一些关键字参数传递给表单,则应重写get_form_kwargs(注意:如果视图从ModelFormMixin继承,此方法将自动传递模型实例(如果存在)。例如:

class SocialMediaProfile(FormView):
    model = DoctorSocialMedia
    form_class = SocialMediaForm
    success_url = "."
    template_name = "doctor/social_media_profile.html"

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs.update({'some_extra_kwarg': 'my_data'})
        return kwargs

相关问题 更多 >