14

我有一些带有大量内联的模型。由于并非每个对象都需要所有对象,因此我声明了内联模型,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.4 额外=0

Django 1.5: 在此处输入图像描述

(欣祖夫根 == 添加)

4

4 回答 4

7

这在以前已经发生过。

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

于 2013-03-16T13:55:13.343 回答
2

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

于 2013-03-18T16:51:57.723 回答
0

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

于 2017-04-19T11:33:41.267 回答
0

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


例如:

  1. 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)

  1. 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]
于 2021-04-03T11:22:01.167 回答