【问题标题】:UserProfile StackedInLine/TabularInLine redesignedUserProfile StackedInLine/TabularInLine 重新设计
【发布时间】:2009-09-07 20:22:45
【问题描述】:

我最近使用 UserProfile 进行了扩展,所以我的 admin.py 看起来像这样:

from django.contrib import admin
from django.contrib.auth.models import User
from models import UserProfile
from django.contrib.auth.admin import UserAdmin

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
                model = UserProfile

class UserProfileAdmin(UserAdmin):
#               fieldsets = [
#                       (None,  {'fields': ['image']}),
#                       ('Avatar', {'fields': ['text'], 'classes': ['collapse']}),
#               ]
                inlines = (UserProfileInline,)

admin.site.register(User, UserProfileAdmin)

和models.py是这样的:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
        # Required
        user = models.ForeignKey(User, unique=True)
        image = models.ImageField(upload_to='media/users/', blank=True, help_text="Your face")
        text = models.TextField(blank=True, help_text="Write something about yourself")

In an app called users that is referred to by settings.py with:

    AUTH_PROFILE_MODULE = users.UserProfile

1

基本上我想要实现的是摆脱#1 StackedInLine 显示在管理员中。我使用 StackedInLine 而不是 TabularInLine 是因为否则我会得到“删除?”列到 对,我发现它是可选的,所以我想排除它或 去掉 StackedInLine 中的 #1 编号。

2

还有。我想知道为什么我在加载时不能使用字段集 admin.py 中的 UserProfile models.py 文件。它只是说领域 不存在。我是否必须以不同于 django/ 的方式调用这些字段 contrib/auth/admin.py 我在哪里看到过它的工作原理?

如果您觉得有更有效的方法,请告诉我。

【问题讨论】:

  • 查看我删除#1的编辑

标签: django tabular inlines stacked


【解决方案1】:

1

我觉得你在这里太挑剔了。如果您绝对需要控制这些微小的细节,您应该创建自己的视图而不是使用管理员。否则堆叠是您想要的,因为表格对于一对一关系没有多大意义。

2

我已经能够在用户配置文件中使用字段集。我的代码和你的代码之间的唯一区别似乎是我使用的是元组而不是字典。这是我的比较:

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class MyUserAdmin(UserAdmin):
    inlines = [UserProfileInline]
    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
        (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser')}),
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
        (_('Groups'), {'fields': ('groups',)}),
    )
    exclude = ['user_permissions']

编辑

我刚刚做了一个快速检查,“#1”来自管理模板。

这意味着您可以通过覆盖 stock admin 模板轻松删除它,尽管这会影响您的所有内联,包括一对多的内联。

堆叠的内联模板可以在django/contrib/admin/templates/admin/edit_inline/stacked.html找到

这意味着您可以将模板复制到您自己的模板目录中作为templates/admin/edit_inline/stacked.html,这将由 Django 在运行时加载而不是库存模板。

复制后编辑您的本地副本以删除第 9 行的 #{{ forloop.counter }}

【讨论】:

  • 是的,我自己也是这么想的,但是如果您需要为某人创建一个网站,它不会受到伤害,它看起来与其他所有网站都不同。当然,我也可以使用字段集,但我无法访问图像或文本等附加字段。它会告诉我它不存在。你是否必须为这些在字段集中工作做一个 getprofile 的事情?所以删除#1 是不可能的?
  • 您的用户配置文件字段的问题就是它所说的:用户配置文件对象不存在。这意味着每当创建用户对象时,您总是需要创建匹配的配置文件。请参阅 django-annoying 项目,了解将为您执行此操作的“AutoOneToOneField”:bitbucket.org/offline/django-annoying/wiki/Home
  • 是否可以通过自己插入 OneToOne 字段而不是使用另一个 Django 插件来手动执行此操作?
  • @Van +1 我总是觉得你的回答很有帮助。
  • @VanGale 我放置了文件并删除了 forloop.counter,但 django 没有加载我的模板。如果我只删除原始文件,那么 django 会加载我修改后的模板。怎么办?
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
相关资源
最近更新 更多