如何在admin ModelForm中预填充HiddenInput

时间:2015-07-24 16:43:31

标签: django forms validation django-admin

我确定在某个地方已经讨论过与我要问的问题类似的问题,但我总是发现非常棘手的解决方案,而我认为必须有一个非常简单的解决方案(你可以猜到)我是新手。

我有一个与Lecturer模型相关联的模型(OneToOne):

User

我希望每个用户通过class Lecturer(models.Model): user = models.OneToOneField(User) ... other fiels follow ... 网站创建自己的Lecturer对象。

我的想法是在没有admin字段的情况下向用户显示add_view。保存模型时,我会像user这样的东西。

换句话说,我不想让用户在注册的自己的obj.user=request.user对象中选择不同的用户。

我通过覆盖get_form方法并提供自定义表单来修改表单:

Lecturer

我不能admin.py class LecturerAdmin(admin.ModelAdmin): def get_form(self, request, obj=None, **kwargs): if is_lecturer(request.user): kwargs['form'] = UserLecturerForm return super(LecturerAdmin, self).get_form(request, obj, **kwargs) class UserLecturerForm(forms.ModelForm): class Meta: model = Lecturer fields = ('__all__') widgets = {'user': forms.HiddenInput()} exclude字段,并在某个其他级别(例如usersave_model ...)给它一个值,因为这会引发错误模板渲染级别:

  

Django版本:1.7.7
  异常类型:KeyError
  例外价值:u" Key' user'未在' LecturerForm'"中找到   例外位置:/usr/lib/python2.7/dist-packages/django/forms/forms.py getitem ,第147行   Python可执行文件:/ usr / bin / python
  Python版本:2.7.9

     

模板渲染期间出错   在模板/usr/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/includes/fieldset.html中,第7行的错误
  [...]
  7 clean

我尝试在表单中创建<div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">字段user。但问题是如何给出正确的hidden值,因为表格对request.user一无所知。如果我没有填写有效值,表单将无法验证(我无法使用request建议的解决方案here

我找到了涉及更改视图的解决方案,但我不会在管理环境中执行此操作。

另一种方法是更改​​验证行为,但仍然验证是表单的一种方法,表单并不知道save_model

感谢任何帮助。

0 个答案:

没有答案