Подтвердить что ты не робот

Редактировать/показать первичный ключ в Django Admin

Похоже, что Django скрывает поля, которые помечены Первичным ключом, отображаться/редактироваться в интерфейсе администратора Django.

Скажем, я хотел бы ввести данные, в которых я могу или не хочу указывать первичный ключ. Как мне перейти к отображению первичных ключей в интерфейсе администратора и как я могу указать, что это необязательно?

4b9b3361

Ответ 1

Я также хотел просто показать "id" (первичный ключ) в администраторе Django, но не обязательно его редактировать. Я просто добавил его в список readonly_fields, и он показал, что это хорошо. IE:

class StudentEnrollmentInline(admin.TabularInline):
    model = Enrollment
    readonly_fields=('id',)

тогда как если бы я попытался добавить его в список "fields", Django расстроился со мной, сказав, что этого поля не существует...

Ответ 2

Если вы явно указываете поле первичного ключа в своих моделях (с primary_key=True), вы должны иметь возможность редактировать его в admin.

Для моделей Django, созданных с помощью ./manage.py syncdb, автоматически добавляется следующее поле первичного ключа:

id = models.AutoField(primary_key=True)

если вы измените (или добавите) это в свою модель явно как первичный ключ IntegerField, вы сможете отредактировать его непосредственно с помощью admin:

id = models.IntegerField(primary_key=True)

Но, как указывали другие, это потенциальное минное поле...

Ответ 3

Нет смысла иметь дополнительный первичный ключ. Либо PK - это автоинкремент, и в этом случае нет необходимости его редактировать или вручную указывать, и в этом случае это всегда необходимо.

Зачем вам это нужно?

Ответ 4

В документации django, есть короткое предложение об этом, что неясно:

Если не указаны ни поля, ни параметры полей, Django по умолчанию будет отображать каждое поле, которое не является автофитомлом, и имеет editable = True в одном наборе полей в том же порядке, что и поля, определенные в модели.

Причина в том, что django не позволяет вам редактировать AutoField любыми способами (и это правильно, поскольку это значение автоматического увеличения и не должно редактироваться). Ответ @mnelson4 - хороший подход для его отображения.

Ответ 6

Чтобы показать первичный ключ, который по умолчанию будет иметь имя столбца "id" в базе данных - используйте "pk"

def __str__(self):
    return '{} - {} ({})'.format(self.pk, self.name, self.pcode)