代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

我怎样才能知道我是在Django的管理员的添加还是编辑页面上?

  •  0
  • Thierry Lam  · 技术社区  · 15 年前

    对于以下代码:

    class Author(models.Model):
        name = models.CharField(max_length=100)
    
    class Book(models.Model):
        author = models.ForeignKey(Author)
        title = models.CharField(max_length=100)
    
    class BookInline(admin.TabularInline):
        model = Book
        extra = 1
    
    class AuthorAdmin(admin.ModelAdmin):
        inlines = [
            BookInline,
        ]
    

    如果我通过管理员添加一个新作者,它将显示一个图书条目,因为 extra=1 . 如果我编辑一个有一本书的现有作者,管理员将显示现有的书和一个新字段以添加新的书。

    编辑当前行为有1本书的作者:

    Author: Someone
    Book: The book title
    Book #2:
    

    编辑一个有一本书的作者需要的行为:

    Author: Someone
    Book: The book title
    

    有可能在 admin.py 上面的代码检查我是在添加还是编辑页面?我的目标是 额外=1 用于添加和 extra=0 用于编辑。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Thierry Lam    15 年前

    没关系,我刚用过 max_num=1 而不是 extra=1 它解决了我的问题。这里是 reference .

        2
  •  0
  •   T. Stone    15 年前

    也许您可以拥有一个函数,该函数根据给定内联的图书数量返回一个条件值?

    有点像…

    class BookInline(admin.TabularInline):
        model = Book
        extra = extra_count
    
        def extra_count(self):
            if self.model.objects.count > 0:
                return 1
            else
                return 0
    

    这是你要求的一种奇怪的行为。出于好奇,为什么您不希望它在编辑模式下显示额外的条目行?