gpt4 book ai didi

Django 用户 HiddenInput 与使用基于类的 View 直接保存在 View 中

转载 作者:行者123 更新时间:2023-12-04 21:21:49 25 4
gpt4 key购买 nike

请将此作为考虑问题。也许有人会使用其中之一
解决办法如下。

我有几个模型,其中包含 ForeignKey(User) field 。
我的基于类的创建 View 源自通用 CreateView .

添加新对象时,有两个选项可以保存关联的用户:

  • 通过覆盖 form_valid 在 View 中保存表单方法;
    这不会暴露 user_id (以及此处未提及的其他不应公开的数据)
    class CreateOfferView(CreateView):

    model = Offer
    form_class = SomeModelFormWithUserFieldExcluded

    def form_valid(self, form):
    instance = form.save(commit=False)
    instance.user = self.request.user
    instance.save()
  • 使用存储(和公开)在隐藏字段中的用户 ID 保存表单。
    这是棘手的部分。还有更多带有用户字段的模型......所以
    创建表单时,我需要使用初始(当前登录)用户填充用户字段,并且我需要隐藏该字段。为此,我使用了我的 OwnFormMixin
    class OwnFormMixin(object):

    def get_form(self, form_class):
    form = super(OwnFormMixin, self).get_form(form_class)
    form.fields['user'].widget = forms.HiddenInput()

    def get_initial(self):
    initial = super(OwnFormMixin, self).get_initial()
    initial['user'] = self.request.user.pk
    #I could also do this in get_form() with form.fields['user'].initial

    class CreateOfferView(OwnFormMixin, CreateView):
    model = Offer
    form_class = SomeModelFormWithAllFields

  • 还有更多 CreateXXXView使用 OwnFormMixin ..

    如何在表单中保存用户数据?

    隐藏与直接在您的 View 中保存?什么是优点/缺点?

    最佳答案

    除非你允许用户修改 ForeignKeyField ,没有理由将它包含在表单中 - 我会采用您使用 exclude 的第一个解决方案。将用户字段排除在您的 ModelForm 之外,并从 request.user 设置用户.事实上,Django documentation now has an example along these exact lines .

    您的优势在于不必防范对 user_id 的操纵。参数,不会暴露您的内部用户 ID,也不必担心不同的创建与更新情况。一个小小的缺点是,如果您需要更改对象的关联 User 的能力。你需要重新开始。

    关于Django 用户 HiddenInput 与使用基于类的 View 直接保存在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821451/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com