我有两个模型 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)
似乎我遵循了相同的范式,但没有运气。
很偶然,当我注释掉
时,问题就解决了# def c_name(self):
# return self.client.name
所需要的只是每个模型中的str。现在,不仅选择显示名称而不是 id,而且管理页面中的列表也显示名称而不是 id。