Django 使用字段的自定义和顺序扩展用户
Django extending user with custom and order of fields
我在 module.py 中用新字段扩展了用户模块。
class Coach(models.Model):
user = models.OneToOneField(User);
address=models.CharField(max_length=100);
address2=models.CharField(max_length=100);
zip= models.CharField(max_length=5);
city= models.CharField(max_length=100);
canton= models.CharField(max_length=50);
country= models.CharField(max_length=50);
prefix=models.CharField(max_length=5);
telephone=models.CharField(max_length=30);
language=models.CharField(max_length=20);
def __unicode__(self):
return self.user.username
def create_user_profile(sender, instance, created, **kwargs):
if created:
Coach.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
我添加这个是为了将用户模型与 admin.py 中教练的新字段连接起来:
class UserProfileInline(admin.StackedInline):
model = Coach
can_delete = False
verbose_name_plural = 'profile'
# Define a new User admin
class UserAdmin(UserAdmin):
inlines =[ UserProfileInline, ]
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
我的问题是管理中用户模型中显示字段的顺序。下图显示当前状态,组 ('profile') 新添加的字段位于页面第一张图片的顶部:
http://www.dodaj.rs/f/1v/3c/1brWQwyO/change-order.png
这就是我想要的:
http://www.dodaj.rs/f/3f/10J/25qz2FSW/change-order2.jpg
class UserAdmin(UserAdmin):
fieldsets = (
('', {
'fields': ('password', 'last_login', 'groups', 'more_fields...',),
}),
)
inlines =[ UserProfileInline, ]
感谢您的回答。
我已经找到方法了,我只是修改模板。默认情况下 admin/template/change_form.html 顺序显示 inline_field_sets 中的第一个字段,然后是 field_sets.
我只是改了顺序,我设置先渲染field_sets,再渲染inline_field_sets。
{% block field_sets %}
{% for fieldset in adminform %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% endblock %}
{% block inline_field_sets %}
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}
{% endfor %}
{% endblock %}
我在 module.py 中用新字段扩展了用户模块。
class Coach(models.Model):
user = models.OneToOneField(User);
address=models.CharField(max_length=100);
address2=models.CharField(max_length=100);
zip= models.CharField(max_length=5);
city= models.CharField(max_length=100);
canton= models.CharField(max_length=50);
country= models.CharField(max_length=50);
prefix=models.CharField(max_length=5);
telephone=models.CharField(max_length=30);
language=models.CharField(max_length=20);
def __unicode__(self):
return self.user.username
def create_user_profile(sender, instance, created, **kwargs):
if created:
Coach.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
我添加这个是为了将用户模型与 admin.py 中教练的新字段连接起来:
class UserProfileInline(admin.StackedInline):
model = Coach
can_delete = False
verbose_name_plural = 'profile'
# Define a new User admin
class UserAdmin(UserAdmin):
inlines =[ UserProfileInline, ]
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
我的问题是管理中用户模型中显示字段的顺序。下图显示当前状态,组 ('profile') 新添加的字段位于页面第一张图片的顶部: http://www.dodaj.rs/f/1v/3c/1brWQwyO/change-order.png
这就是我想要的: http://www.dodaj.rs/f/3f/10J/25qz2FSW/change-order2.jpg
class UserAdmin(UserAdmin):
fieldsets = (
('', {
'fields': ('password', 'last_login', 'groups', 'more_fields...',),
}),
)
inlines =[ UserProfileInline, ]
感谢您的回答。
我已经找到方法了,我只是修改模板。默认情况下 admin/template/change_form.html 顺序显示 inline_field_sets 中的第一个字段,然后是 field_sets.
我只是改了顺序,我设置先渲染field_sets,再渲染inline_field_sets。
{% block field_sets %}
{% for fieldset in adminform %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% endblock %}
{% block inline_field_sets %}
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}
{% endfor %}
{% endblock %}