【问题标题】:Django Admin - Prevent Inline Showing When Adding a New ObjectDjango Admin - 添加新对象时防止内联显示
【发布时间】:2021-05-09 12:14:03
【问题描述】:

我在 Django 中有两个一对一相关的模型。简化版如下:

class User(models.Model):
    name = models.CharField(max_length=40)

class Profile(models.Model):
    age = models.IntegerField()
    user = models.OneToOneField(User, on_delete=models.CASCADE)

我已使用信号在创建新用户时自动创建配置文件。

我还创建了一个 ProfileInline 并将其包含在我的 UserAdmin 中,如下所示:

class ProfileInline(admin.TabularInline):
    model = Profile
    can_delete = False

class UserAdmin(admin.ModelAdmin):
    list_display = ('name',)
    inlines = [ProfileInline,]

我面临的问题是,当在管理模块中创建新用户时,创建新用户的人也在同一页面上填充内联字段,保存时会生成错误,因为两者信号模块和管理员正在尝试创建一个新的配置文件。

添加新用户时,有什么方法可以防止 ProfileInline 在 UserAdmin 中显示?

谢谢。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    在您的ProfileInline 中添加extra=0 以防止在管理员端创建新用户时创建新的配置文件实例...

        class ProfileInline(admin.TabularInline):
            model = Profile
            can_delete = False
            extra = 0
        class UserAdmin(admin.ModelAdmin):
            list_display = ('name',)
            inlines = [ProfileInline,]

    您可以使用 ModelAdmin get_inline_instances 功能。以下代码从 add_view 中删除 inlines

        class ProfileInline(admin.TabularInline):
            model = Profile
            can_delete = False
        
        class UserAdmin(admin.ModelAdmin):
            list_display = ('name',)
            inlines = [ProfileInline,]
        
            def get_inline_instances(self, request, obj=None):
                return obj and super(UserAdmin, self).get_inline_instances(request, obj) or []

    【讨论】:

    • 谢谢。这可以阻止表单出现,但仍然会出现“添加另一个配置文件”。有没有办法抑制这种情况?
    • 你好@ankGT,请检查我更新的答案..这里Profile form在管理端抑制..
    猜你喜欢
    • 2015-03-20
    • 2012-06-09
    • 2020-04-16
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多