在验证基于类的数据之前是否有正确的方法来修改表单字段
FormView
。更具体地说是CreateView
。有必要使用基于类的视图,因为我添加了一堆自定义混合:
class Create(HtmxRequiredMixin, CreatedByMixin, HxFormValidationMixin, BaseMixin, CreateView):
template_name = 'administration/form.html'
model = Object
form_class = Form
success_url = reverse_lazy('object-list')
hx_retarget = '#CREATE'
base = 'object'
views_list = ('create',)
我在 DRF 视图集中使用 CreatedByMixin 作为 api 休息。看起来像:
class CreatedByMixin:
def create(self, request, *args, **kwargs):
data = request.data.copy()
if request.user.is_authenticated:
data['created_by'] = request.user.id
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
我想要为我的 CreateView 使用类似的 mixin,但我不确定覆盖的正确方法是什么。
此外,
HxFormValidationMixin
已经覆盖了form_valid
和form_invalid
方法。
FormView
继承自FormMixin
,它实现了方法get_form_kwargs()
。 通过重写此方法,您可以在将 data
kwarg 传递给表单构造函数之前对其进行处理。
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if 'data' in kwargs:
data = kwargs['data'].copy()
# change whatever you want
data['foo'] = 'bar'
# replace the original with the copy
kwargs['data'] = data
return kwargs