请将此作为考虑问题。也许有人会使用以下解决方案之一。
我有几个模型包含一个ForeignKey(User)
字段。我的基于类的创建视图是从通用的CreateView
.
添加新对象时,有两个选项可以保存关联的用户:
通过覆盖方法将表单保存在视图中
form_valid
;这不会暴露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
..
您如何将用户数据保存在表单中?
隐藏与直接保存在您的视图中?什么是优点/缺点?