django 1.5 管理员内联额外

Posted

技术标签:

【中文标题】django 1.5 管理员内联额外【英文标题】:django 1.5 admin inline extra 【发布时间】:2013-03-01 04:17:30 【问题描述】:

我有一些具有大量内联的模型。由于并非每个对象都需要所有对象,因此我使用 extra = 0 声明了内联模型,因此内联上出现了一个小的 add +

但是,这似乎不再适用于 django 1.5。如果设置了extra = 0,则内联不再可编辑。

有没有办法把 1.4 的行为变成 1.5?

示例代码:

class ModelInline(admin.StackedInline):
    model = MyModel
    extra = 0

class OtherModelAdmin(admin.ModelAdmin)
    inlines = [ModelInline]

admin.site.register(OtherModel, OtherModelAdmin)

编辑(某些屏幕):

Django 1.4:

Django 1.5:

(欣祖夫根 == 添加)

【问题讨论】:

这里可以看到示例代码。 k,添加了一些示例代码 【参考方案1】:

这已经发生过。

The new javascript made this impossible because the "Add Another" button 
was controlled by max_num, and ignored a value of 0.
The javascript ignored a value of 0 because max_num has a default value of 0, 
and all the code using it had taken to equating max_num = 0 with being "off". 
So you can't actually have a maximum of 0. It's not possible.

Gabrial Hurley 创建了一个补丁,可以在不破坏其他任何内容的情况下恢复所需的行为。这是 3 年前的事了,我不知道它是否仍然适用于 Django 1.5。试试看:)

https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff

这是同一错误的票证(3 年前):

https://code.djangoproject.com/ticket/13023

【讨论】:

我在 1.6 中似乎无法应用这个,因为在 models.py 中不再定义 total_form_count,只在 formsets.py 中定义,而且代码不同,所以我不确定要更改什么.有人可以帮忙吗? @smwilsonau 在 Django 1.6 中称为initial_form_count 谢谢,我找到了对应的行并应用了补丁,但我的问题却是不同的......【参考方案2】:

我遇到了同样的问题,因为我在 django 安装之外的目录中有静态管理内容。将 Django 1.5 静态内容从 django/contrib/admin/static/admin/js/ 复制到 STATIC_ROOT/admin/js 解决了这个问题。

【讨论】:

这实际上不是一件好事。当你在某个时候升级 django 版本时,你会遇到麻烦,因为你不会看到那些静态文件的新版本(只是有这样的问题)。如果您以正确的方式提供静态内容 (docs.djangoproject.com/en/dev/howto/static-files),您应该没有问题【参考方案3】:

更好的解决方案是覆盖内联本身的 get_extra 方法。这适用于 Django 1.9,但我不能说早期版本

【讨论】:

【参考方案4】:

您所要做的就是添加extra 字段。


例如:

    models.py:

class Category(models.Model):
    name = models.CharField(max_length=50)
    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.IntegerField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def __str__(self):
        return ', '.format(self.name, self.company)

    admin.py:
    class InlinesProduct(admin.StackedInline):
        model = Product
        extra = 0     #<=== For remove empty fields from admin view

    @admin.register(Category)
    class CategoryAdmin(admin.ModelAdmin):
        inlines = [InlinesProduct]

【讨论】:

以上是关于django 1.5 管理员内联额外的主要内容,如果未能解决你的问题,请参考以下文章

Django:从内联模型管理员访问父实例

在 Django 管理员中嵌套内联?

Django Admin:访问内联管理员中的父实例

Django 管理员内联:select_related

Django 管理员自定义验证 - 至少需要一个内联外键模型

如何在字段集中显示Django管理员内联模型?