Django admin:make field可以添加但不能编辑

Phi*_*den 35 django django-admin

我有一个类似的模型:

class Product(models.Model):
    third_party_id = models.CharField(max_length=64, blank=False, unique=True)
Run Code Online (Sandbox Code Playgroud)

使用Django默认主键.我希望用户能够通过在添加页面上设置third_party_id来添加产品,但我不希望编辑页面中的该字段可编辑以避免损坏third_party_id.在Django文档中,相同的设置似乎用于添加和编辑.这可能吗?

sha*_*nyu 48

不要设置self.readonly_fields为避免线程问题.而是覆盖get_readonly_fields方法:

def get_readonly_fields(self, request, obj=None):
    if obj: # obj is not None, so this is an edit
        return ['third_party_id',] # Return a list or tuple of readonly fields' names
    else: # This is an addition
        return []
Run Code Online (Sandbox Code Playgroud)

  • 非常酷,不知道这种方法.+1.如果没有覆盖方法,我们该怎么办?任何策略?非常感激. (3认同)
  • 值得一提的是,这段代码必须进入 ModelAdmin 而不是模型本身 (2认同)

小智 5

以上是有用的(使用get_readonly_fields的shanyu的答案),但是如果在"StackedInline"中使用它则无法正常工作.结果是任何字段的两个副本被标记为只读,并且在"添加"实例中不可编辑.看到这个bug:https://code.djangoproject.com/ticket/15602

希望这可以节省一些人的搜索!