自定义django管理对象详细信息页面网址(对象更改网址)

时间:2017-09-29 16:31:27

标签: python django django-admin

我正在尝试覆盖默认的django管理员更改网址。 在我的表格中,我有 复合主键

class ABC(models.Model):
    code = models.ForeignKey('PQR', models.DO_NOTHING, db_column='code', primary_key=True)
    language = models.ForeignKey(Languages, models.DO_NOTHING, db_column='language')
    me_name = models.TextField()
    common_name = models.TextField(blank=True, null=True)
    abbreviation = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'abc'
        unique_together = (('code', 'language'), ('language', 'me_name'),)

现在我在每个对象的django admin中的管理员网址是/ admin / home / abc / {{code}} / change /。 但我在对象中重复了代码,因为主键是('代码','语言')的组合。因此对于重复代码抛出的对象

Error
    MultipleObjectsReturned at /admin/home/abc/X00124/change/
    get() returned more than one ABC -- it returned 2!

此处X00124此代码与多个对象关联。

我想在这里覆盖modeladmins get_urls()方法并构建url /admin/home/abc/ {{}}} / {{language}} /change /。

我试过但没有成功。将不胜感激。

1 个答案:

答案 0 :(得分:0)

我制作了一个虚拟键,将复合键表示为单个值,允许在不更改代码的情况下使用 Django 管理员 -

https://viewflow.medium.com/the-django-compositeforeignkey-field-get-access-to-a-legacy-database-without-altering-db-tables-74abc9868026