【问题标题】:How can I tell whether I'm on an add or edit page in Django's Admin?我如何判断我是否在 Django 的管理中的添加或编辑页面上?
【发布时间】:2009-10-02 19:05:00
【问题描述】:

对于以下代码:

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:

想要编辑拥有 1 本书的作者的行为:

Author: Someone
Book: The book title

是否可以在admin.py上面的代码中检查我是否在添加或编辑页面?我的目标是设置extra=1 用于添加,extra=0 用于编辑。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    没关系,我只是使用max_num=1 而不是extra=1,它解决了我的问题。这是reference

    【讨论】:

      【解决方案2】:

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

      类似...

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

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

      【讨论】:

      • 从当前需求中需要 1 行,但模型已被编码以预测未来的需求变化。我不确定这是否是一个好习惯,但目前就是这样。
      猜你喜欢
      • 1970-01-01
      • 2019-08-22
      • 2016-12-20
      • 2013-02-23
      • 1970-01-01
      • 2021-02-12
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多