管理页面在外键选择中显示名称而不是 ID 时出现问题

问题描述 投票:0回答:1

我有两个模型 Client 和 Master。 Master 有一个给客户端的外键。我试图选择外键以在管理页面中显示名称,但出现错误。

这是客户端模型

class Client(models.Model):
    id = models.BigAutoField(primary_key=True),
    name = models.CharField(max_length=200, blank=False, null=True)
    clientEmail = models.CharField(max_length=200, blank=False, null=True)
    clientPhone = models.CharField(max_length=200, blank=False, null=True)
    clientCompany = models.CharField(max_length=200, blank=False, null=True)

    def __str__(self):
        return self.name

这是一个缩写的大师

class Master(models.Model):
    id = models.BigAutoField(primary_key = True)
    client = models.ForeignKey(Client, on_delete=models.CASCADE,null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user_metadata = models.JSONField(max_length=500, null=True, blank=True)
    user_id = models.CharField(max_length=500, blank=False, null = True)
    user_name = models.CharField(max_length=500, blank=False, null = True)

   #abbreviated

    def __str__(self):
        return self.user_name

    def c_name(self):
        return self.client.name

和 admin.py


class MasterDataAdmin(admin.ModelAdmin):
list_display = ( 'id', 'c_name','user_name', 'account_status')

admin.site.register(Master, MasterDataAdmin)

现在,当我进入管理页面的Master时,我得到......

OperationalError at /admin/kdconnector/master/
no such column: kdconnector_master.client_id
Request Method: GET
Request URL:    http://localhost:8000/admin/kdconnector/master/
Django Version: 4.1.7
Exception Type: OperationalError
Exception Value:    
no such column: kdconnector_master.client_id
Exception Location: C:\Users\MikeOliver\KDConnectorSite\venv\Lib\site-packages\django\db\backends\sqlite3\base.py, line 357, in execute
Raised during:  django.contrib.admin.options.changelist_view
Python Executable:  C:\Users\MikeOliver\KDConnectorSite\venv\Scripts\python.exe
Python Version: 3.11.3

我尝试了以下有效的示例。

class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def author_name(self):
        return self.author.name


admin.site.register(Author)
admin.site.register(Book, BookAdmin)

似乎我遵循了相同的范式,但没有运气。

django django-models foreign-keys
1个回答
0
投票

很偶然,当我注释掉

时,问题就解决了
# def c_name(self):
#     return self.client.name

所需要的只是每个模型中的str。现在,不仅选择显示名称而不是 id,而且管理页面中的列表也显示名称而不是 id。

© www.soinside.com 2019 - 2024. All rights reserved.