我确定在某个地方已经讨论过与我要问的问题类似的问题,但我总是发现非常棘手的解决方案,而我认为必须有一个非常简单的解决方案(你可以猜到)我是新手。
我有一个与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
字段,并在某个其他级别(例如user
或save_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行的错误
[...]
7clean
我尝试在表单中创建<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
。
感谢任何帮助。