Reputation: 2569
I have some models with a large number of inlines. Since not all are needed for every object I declared the inline model with extra = 0
so that a small add +
appeared on the inline.
However, this seems to no longer work in django 1.5. If extra = 0
is set, the inline is no longer editable.
Is there a way to get the 1.4 behavior into 1.5?
Example Code:
class ModelInline(admin.StackedInline):
model = MyModel
extra = 0
class OtherModelAdmin(admin.ModelAdmin)
inlines = [ModelInline]
admin.site.register(OtherModel, OtherModelAdmin)
Edit (some screens):
Django 1.4:
Django 1.5:
(Hinzufügen == add)
Upvotes: 14
Views: 10859
Reputation: 1
Use "get_extra()" as shown below if "extra" field doesn't work:
class ModelInline(admin.StackedInline):
model = MyModel
# extra = 0
def get_extra(self, request, obj=None, **kwargs):
return 0 # Is equivalent to "extra = 0"
class OtherModelAdmin(admin.ModelAdmin)
inlines = [ModelInline]
admin.site.register(OtherModel, OtherModelAdmin)
Upvotes: 0
Reputation: 372
All you have to do is add extra
field.
For Example:
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]
Upvotes: 0
Reputation: 180
the better solution would be to override the get_extra method of the inline itself. This works in Django 1.9, though i cannot say for earlier versions
Upvotes: 0
Reputation: 29
I ran into the same issue because I had the static admin content in a directory that was outside of django's install. Copying the Django 1.5 static content from django/contrib/admin/static/admin/js/ to STATIC_ROOT/admin/js fixed the issue.
Upvotes: 2
Reputation: 22808
This is already happen before.
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.
There is a patch create by Gabrial Hurley to restores desired behaviour without breaking anything else. This is 3years ago and I don't know if it still working for Django 1.5. Just try :)
https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff
Here is the ticket for that same bug (3 years ago):
https://code.djangoproject.com/ticket/13023
Upvotes: 8