125

Suppose I have a model:

class SomeModel(models.Model):
    id = models.AutoField(primary_key=True)
    a = models.CharField(max_length=10)
    b = models.CharField(max_length=7)

Currently I am using the default Django admin to create/edit objects of this type. How do I remove the field b from the Django admin so that each object cannot be created with a value, and rather will receive a default value of 0000000?

Dave Mackey
  • 4,306
  • 21
  • 78
  • 136
Yuval Adam
  • 161,610
  • 92
  • 305
  • 395

3 Answers3

193

Set editable to False and default to your default value.

http://docs.djangoproject.com/en/stable/ref/models/fields/#editable

b = models.CharField(max_length=7, default='0000000', editable=False)

Also, your id field is unnecessary. Django will add it automatically.

phoenix
  • 7,988
  • 6
  • 39
  • 45
FogleBird
  • 74,300
  • 25
  • 125
  • 131
27

You can also use a callable in the default field, such as:

b = models.CharField(max_length=7, default=foo)

And then define the callable:

def foo():
    return 'bar'
MrOodles
  • 1,856
  • 21
  • 21
26

You can set the default like this:

b = models.CharField(max_length=7,default="foobar")

and then you can hide the field with your model's Admin class like this:

class SomeModelAdmin(admin.ModelAdmin):
    exclude = ("b")
Andrew Hare
  • 344,730
  • 71
  • 640
  • 635