我有Django模型“AmountOfBooks”,它仅用作Book模型的平衡 如果这不是数据库建模的好模式,那就这么说吧。
无论如何AmountOfBooks有两个字段:
class AmountOfBooks(models.Model):
book = models.ForeignKey(Book, editable=False)
amount = models.PositiveIntegerField(default=0, editable=False, help_text="Amount of book.")
它们设置为editable = False,因为此模型只能由代码编辑 例如。当书籍被创建时,AmountOfBooks中该书籍的对象被设置为0,并且当添加书籍或取得平衡时,可以增加或减少余额。
因此,当我点击Django admin中的“添加书籍数量”按钮时,不会显示AmountOfBooks模型的字段。
但我想从Django管理员那里删除AmountOfBooks模型中的那个按钮 怎么做?
更新
How to make Django model just view (read-only) in Django Admin?
答案 0 :(得分:17)
很简单,只需在Admin类中重载has_add_permission方法,如下所示:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
答案 1 :(得分:4)
要执行此操作,您需要覆盖Admin类中的has_add_permission
方法:
class AmountOfBooksAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
# to disable editing for specific or all fields
# you can use readonly_fields attribute
# (to see data you need to remove editable=False from fields in model):
readonly_fields = ('book', 'amount')
答案 2 :(得分:1)
你问过你的设计本身,所以我先解决这个问题。如果你想保留你的股票的历史,那么拥有一个独特的表(模型)是有道理的,但是你需要一个时间戳字段和一个独特的约束(书,时间戳)。现在,如果您只想保持库存流量,那么账面和金额之间的关系实际上是一对一的,因此金额字段实际上属于账面表。在这种情况下,您只需在书的ModelAdmin“readonly_fields”属性中添加“amount”即可解决问题。