- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模型 Employee
与 User
建立一对一关系.我试图在员工管理中包含一些用户字段 ( first_name, last_name, username, email
),以便直接从员工添加/更改表单编辑这些字段,但我仍然没有想出如何去做。
我看到另一次以类似的方式做这种事情,但现在我有一个字段集错误:Unknown field(s) (first_name) specified for Employee. Check fields/fieldsets/exclude attributes of class EmployeeAdmin
这是代码:
# FIELDSETS
default_employee_fieldset = (
('General', {
'fields': (
('user', 'full_name',),
),
}),
# ..OTHER FIELDS NOT INCLUDED
)
finance_fields_employee_fieldset = [
('General', {
'fields': (
('full_name',),
('first_name', 'last_name')
),
}),
# ..OTHER FIELDS NOT INCLUDED
]
# ADMIN FORM
class EmployeeAdminForm(forms.ModelForm):
class Meta:
model = Employee
def __init__(self, *args, **kwargs):
super(EmployeeAdminForm, self).__init__(*args, **kwargs)
self.fields['first_name'] = forms.CharField(_('first name'), max_length=30, blank=True)
self.fields['last_name'] = forms.CharField(_('last name'), max_length=30, blank=True)
if 'instance' in kwargs:
user = kwargs['instance'].user
self.fields['first_name'].initial = user.first_name
self.fields['last_name'].initial = user.last_name
# MODEL ADMIN
class EmployeeAdmin(ExtendedAdmin):
list_display = ('user', 'department', 'line_manager', 'acting_line_manager', 'jobtitle', 'office', 'payroll_id',)
search_fields = ('user__username', 'user__first_name', 'user__last_name',
'line_manager__user__first_name', 'line_manager__user__last_name')
list_filter = ('department', 'grade', 'clearance', 'office', 'user__is_active', 'user__is_staff',
'ready_for_paid_work')
fieldsets = default_employee_fieldset
def changelist_view(self, request, extra_context=None):
extra_context = {'title': 'Employee details'}
return super(EmployeeAdmin, self).changelist_view(request, extra_context)
def change_view(self, request, object_id, form_url='', extra_context=None):
if object_id:
try:
record = Employee.objects.get(id=object_id)
extra_context = {'title': 'Edit employee record: %s' % (str(record),)}
except (ValueError, Employee.DoesNotExist):
pass
# Generate a new CSRF token as this page contains sensitive data
rotate_token(request)
return super(EmployeeAdmin, self).change_view(request, object_id, form_url, extra_context)
def queryset(self, request):
qs = super(EmployeeAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
elif request.user.has_perm('myapp.change_all_employees'):
if request.user.has_perm('myapp.change_ex_employees'):
return qs.filter(user__is_staff=True)
else:
return qs.filter(user__is_staff=True, user__is_active=True)
else:
return qs.filter(user__is_staff=True, user__is_active=True).filter(
Q(line_manager=request.user.employee) |
Q(acting_line_manager=request.user.employee) |
Q(user=request.user)
)
def get_form(self, request, obj=None, *args, **kwargs):
self.form = EmployeeAdminForm
if obj:
if request.user.has_perm('myapp.change_hr_employee_data'):
self.readonly_fields = ('user', )
self.exclude = None
self.fieldsets = finance_fields_employee_fieldset
elif request.user.has_perm('myapp.change_employee_data_operations'):
if request.user == obj.user:
# set readonly fields
self.exclude = None
self.fieldsets = finance_fields_employee_fieldset
else:
# set readonly fields
self.exclude = ('employer_pension_contribution', 'employee_pension_contribution',)
self.fieldsets = default_employee_fieldset
else:
# if user is in AAA department and not employee's linemanager and not own record
if request.user.employee.department == settings.DPTS['AAA']
if request.user == obj.user:
# set readonly fields
else:
# set readonly fields
self.exclude = ('account_number', 'sort_code', 'salary',
'employer_pension_contribution', 'employee_pension_contribution',)
self.fieldsets = default_employee_fieldset
else:
# if user is editing his own record
if request.user == obj.user:
# set readonly fields
self.exclude = ('account_reference', 'payroll_id',)
self.fieldsets = finance_fields_employee_fieldset[0:-2]
# if user is editing some for whom is line manager
else:
if request.user.employee == obj.line_manager or \
request.user.employee == obj.acting_line_manager:
# set readonly fields
self.fieldsets = default_employee_fieldset
self.exclude = ('employer_pension_contribution', 'employee_pension_contribution',)
else:
self.readonly_fields = ()
self.exclude = ()
self.fieldsets = default_employee_fieldset
form = super(EmployeeAdmin, self).get_form(request, *args, **kwargs)
form.request = request
return form
def save_model(self, request, obj, form, change):
if change:
old_obj = Employee.objects.get(id=obj.id)
if obj.jobtitle != old_obj.jobtitle:
employee_detail_change_notification(obj, 'job title', obj.jobtitle.name)
if obj.line_manager != old_obj.line_manager:
employee_detail_change_notification(obj, 'line manager', obj.line_manager)
if obj.acting_line_manager != old_obj.acting_line_manager:
employee_detail_change_notification(obj, 'acting line manager', obj.acting_line_manager)
if obj.home_address_line1 != old_obj.home_address_line1 or \
obj.home_address_line2 != old_obj.home_address_line2 or\
obj.home_address_line3 != old_obj.home_address_line3 or\
obj.home_address_city != old_obj.home_address_city or\
obj.home_address_postcode != old_obj.home_address_postcode or\
obj.home_address_country != old_obj.home_address_country or\
obj.home_address_phone != old_obj.home_address_phone or\
obj.personal_email != old_obj.personal_email:
new_address = '%s\n%s\n%s\n%s\n%s\n%s\n\nPhone: %s\nEmail: %s' %(
obj.home_address_line1,
obj.home_address_line2,
obj.home_address_line3,
obj.home_address_city,
obj.home_address_postcode,
obj.get_home_address_country_display(),
obj.home_address_phone,
obj.personal_email,
)
employee_detail_change_notification(obj, 'home address details', new_address)
if obj.marital_status != old_obj.marital_status:
employee_detail_change_notification(obj, 'marital_status', obj.get_marital_status_display())
obj.save()
admin.site.register(Employee, EmployeeAdmin)
最佳答案
Admin 找不到 user_name 的原因是 user_name 字段未在类级别的自定义表单上定义。它仅在 __init__
中定义.当管理员检查表单的可用字段时,它只能访问该类,而不是初始化的表单。所以检查表单类并没有显示 user_name 可用。
直接在类级别定义所有字段而不是表单的 __init__
方法。如果您不需要所有情况下的所有字段,则根据需要从 __init__
中的表单字段字典中删除字段。需要的方法。
您也可以反向执行此操作 - 将员工信息添加到用户编辑页面?这可以按照 https://docs.djangoproject.com/en/1.4/topics/auth/#adding-userprofile-fields-to-the-admin 中的说明完成。 .
最后,您似乎已经到了在不使用 Admin 的情况下实现您想要的功能可能更容易的阶段——虽然 Django 的 Admin 确实有很多可扩展性功能,但在某些时候编写您自己的实现将比使用 Admin 更容易。
关于django admin fieldsets - 添加相关模型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24735252/
我在字段集显示和隐藏功能方面遇到问题。在我的应用程序左侧,我有一个带有更改监听器的组合框。在右侧,我有几个不同的文本字段,它们根据组合框中选定的值显示和隐藏。每个隐藏和显示函数都可以使用字段集,但如果
我有一个 ExtJS 项目,其中有一个 FieldSet,我需要动态地从中删除项目并替换为不同的项目。 但是,当我删除项目然后添加新项目时,FieldSet 每次都会稍微扩展,因此整个 FieldSe
我对字段集标记有疑问:图例无缘无故地加下划线。如何去掉下面的细线? 这是显示问题的屏幕截图,我添加了红色背景只是为了突出显示图例“HEY”下的行 预先感谢您的帮助。 最佳答案 Bootstrap 正在
我刚开始使用 Blueprint,所以不要攻击我 :-)这是我的代码,一个简单的两列布局: Logo Here SlideShow
我想实现某种效果,其中字段集的底部边框应该覆盖其中的内容,z-index 低于内容,因此它看起来像这样: 到目前为止我得到的是简单的东西,其中每个圆圈都包含在字段集中,但没有任何效果。 HTML 和
这个问题在这里已经有了答案: Fieldset does not support display: table / table-cell (3 个答案) 关闭 5 年前。 样式 工作异常。在 Goo
正如之前多次询问(但从未真正回答过),我想将图例置于字段集中。 技巧在这里完美完成,我也为我的元素购买了它:http://themeforest.net/item/aloma-liquid-mobil
我正在尝试获取一个表单来动态添加更多具有动态生成的 ID 的输入字段。除了字段集 ID 使用最后一个输入字段的名称而不是原始字段集(如果您检查字段集的 ID,它说的是“fenceType2”而不是“f
在对 CSS 进行了大量的修改之后,我已经设法让我的表单元素正确排列。不幸的是,我终其一生都无法弄清楚如何修复标签/图像的定位错误。我希望它们在选择框旁边居中排列,但它们在选择框的顶部对齐,到目前为止
我在表单中使用了一些字段集。但是当我想使用它们时,它们就像残疾人一样。您不能在文本框中单击,也不能在选择框中选择选项。这是我的代码: HTML: Group 1 Opt
我一直在尝试解决这个问题一段时间,找不到解决方案。 这是我的代码 CSS .parent{ width:100px; display:table; border:1px sol
我有 2 个字段集: first fildset second fieldset 如何将它们放在同一行? 最佳答案 您可以将它们的 display css 属性设置为 inline: f
给定的字段集不能有两个图例,但是有没有办法在不使用 的情况下获得图例效果?标签? Some Text 我可以添加align=right到图例标签,使其位于右
我对 DTD 一无所知。 http://www.bls.gov/oco/ocos292.htm 在此页面上查看 fieldset 是如何在表单之外使用的,这很酷!我喜欢这种风格! 最佳答案 我认为这个
我的 html/css 中有以下代码。我正在寻找这样的设计: 我用了这个http://jsfiddle.net/watson/Gsj27/3/ fiddle 用于对字段集进行分区。但我无法显示字段集的
我有一个模型 Employee与 User 建立一对一关系.我试图在员工管理中包含一些用户字段 ( first_name, last_name, username, email ),以便直接从员工添加
我的 HTML 中有一个字段集,它基本上代表 5 星级评级系统,如下所示: 我已经定义了一个 onclick 事件,它定义了用户何时单击某些星级(
我有一些字段集,每个字段集都有几个输入字段。 我现在要做的是将 css 样式应用于“事件”字段集。 我所说的“活跃”是指字段集的输入元素之一得到了关注。 fieldset:hover{ opa
我尝试了不同的选项来对齐字段集中的元素,以便使用不同的方法将标题、文本和“了解更多”按钮保持在同一行上。但结果仍然是负面的: Align result 这是我的代码: fieldset { h
我是一名优秀的程序员,十分优秀!