Я использую Django (в частности, django-admin) в качестве панели администратора для сайта, который использует PHP для клиентских функций. Я бездельничал, заставляя администратора выглядеть именно так, как я хочу, и пока все хорошо. Однако я столкнулся с несколькими проблемами, которые мне нужно решить.
Вот модели, с которыми я работаю:
class Permissions(models.Model):
id = models.IntegerField(primary_key=True)
league_key = models.CharField(max_length=15)
commissioner_id = models.ForeignKey(Accounts, db_column='commissioner_id',
to_field='id')
status = models.IntegerField()
key = models.CharField(max_length=50)
publisher_key = models.CharField(max_length=25)
publisher_display_name = models.CharField(max_length=50)
base_league = models.ForeignKey('self', db_column='id')
share = models.IntegerField()
default_fixture_key = models.CharField(max_length=50)
def __unicode__(self):
return self.publisher_key + ' / ' + self.league_key
class Meta:
db_table = u'permissions'
verbose_name = 'Permissions'
verbose_name_plural = 'Permissions'
class PermissionsAdmin(admin.ModelAdmin):
list_display = ('league_key', 'publisher_key', 'commissioner_id', 'status',
'base_league', 'share', 'default_fixture_key')
list_display_links = ('league_key','commissioner_id', 'base_league')
exclude = ('id',)
Первая проблема заключается в том, что административная форма для редактирования существующей записи помечает одно из полей как обязательное. Как мне сообщить django-admin, когда поле является обязательным и не обязательным?
Вторая проблема, с которой я сталкиваюсь, заключается в том, что когда я говорю «Сохранить эту запись», я получаю следующую ошибку: двойное значение ключа нарушает уникальное ограничение «permissions_pkey». Это заставляет меня думать, что Django не делает обновления, он пытается сделать INSERT
Мне также пришло в голову, что это может быть проблемой, связанной с Postgresql. permissions_pkey является ограничением для этой таблицы, отслеживая последовательность, используемую для автоматического увеличения идентификатора для этой таблицы
Хотя документы Django потрясающие, у них, похоже, нет информации, которая мне нужна, чтобы это выяснить.
(РЕДАКТИРОВАТЬ: копаясь в трассировке стека, я нашел этот удивительный маленький самородок:
sql
'UPDATE "permissions" SET "league_key" = E\'l.1258472565 \', "commissioner_id" = 7,
"status" = 0, "key" = E\'cfcd208495d565ef66e7dff9f98764da \',
"publisher_key" = E\'chrishartjes.com \',
"publisher_display_name" = E\'Chris Hartjes Free Press \',
"id" = 744, "share" = 0,
"default_fixture_key" = E\'\' WHERE "permissions"."id" = 745 '
что заставляет меня думать, что моя маленькая запись ForeignKey сама по себе вызывает проблему)