2016-10-17 2 views
2

Установка extra = 1 в моей модели всегда показывает 1 пустое поле. Это нормально при вставке нового элемента, но я не хочу показывать дополнительное пустое поле во время редактирования. Как я могу это сделать?Django Admin добавляет дополнительные значения 0 при редактировании

Скажем, наша модель такова:

class Foo(models.Model): 
    bar = models.ForeignKey(Bar, models.CASCADE, related_name='bars') 
    title = models.CharField(_('Title'), max_length=255) 
    body = models.TextField(_('Body')) 
    __str__(self): 
     return '%s' % (self.title) 

,

class FooInline(admin.StackedInline): 
    model = Foo 
    extra = 1 #Also shows 1 extra empty field while editing. 
       #I don't want to show if there is already a non-empty field 


class FooAdmin(admin.ModelAdmin): 
    prepopulated_fields = {'slug': ('title',)} 
    inlines = [ 
     FooInline 
    ] 

ответ

2

Override get_extra метод вместо того, чтобы задать значение для дополнительного члена класса.

Возвращает количество дополнительных встроенных форм для использования. По умолчанию возвращается атрибут InlineModelAdmin.extra.

Переопределите этот метод, чтобы программно определить количество дополнительных встроенных форм. Например, это может быть на основе экземпляра модели (переданного в качестве ключевого слова аргумента OBJ):

Что-то вроде:

def get_extra(self, request, obj=None, **kwargs): 
    if obj.bar_set.count() : 
     return 0 
    else: 
     return 1 
+0

еще один вопрос, если у меня есть несколько моделей, скажем, что они находятся на та же самая страница администратора, есть ли способ наследовать или я должен жестко указывать это для каждой модели Inline? (Извините, если я неправильно использовал некоторые условия) – Kaan

+0

Да, вы можете создать свой собственный администратор базы и расширить его – e4c5

Смежные вопросы