我正在使用 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 是对该表的约束,跟踪用于自动增加该表的 id 的序列
虽然 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 '
这让我认为我自己的小外键条目导致了问题)