Python Django-ManyToManyField反向关系问题
我有3种型号,Python Django-ManyToManyField反向关系问题,python,django,model,Python,Django,Model,我有3种型号,行业有一个ManyToManyField到客户和联系人有一个外键到客户。当我转到django管理员时,Contact和Industry都会显示正确的小部件,并允许选择关系,它们似乎可以工作。但是,如果我尝试访问我创建的客户机,则会出现以下错误: TypeError at /admin/project/client/ __call__() missing 1 required keyword-only argument: 'manager' 在尝试创建联系人而不设置客户端时,可能会
行业
有一个ManyToManyField
到客户
和联系人
有一个外键
到客户
。当我转到django管理员时,Contact
和Industry
都会显示正确的小部件,并允许选择关系,它们似乎可以工作。但是,如果我尝试访问我创建的客户机
,则会出现以下错误:
TypeError at /admin/project/client/
__call__() missing 1 required keyword-only argument: 'manager'
在尝试创建联系人
而不设置客户端
时,可能会出现另一个错误:
非空约束失败:项目\联系人。公司\ id
客户端
模型设置中缺少哪些可能导致这些问题的内容
型号.py
class Client(models.Model):
name = models.CharField(max_length=100)
class Industry(models.Model):
name = models.CharField(max_length=100)
clients = models.ManyToManyField('Client', related_name='industries', blank=True)
def get_clients(self):
return ", ".join([c.clients for c in self.clients.all()])
class Contact(models.Model):
name = models.CharField(max_length=100)
clients = models.ForeignKey(Client, related_name='contacts', blank=True, on_delete=models.CASCADE)
class ClientAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'contacts', 'industries']
class IndustryAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'get_clients']
class ContactAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'company']
admin.site.register(Client, ClientAdmin)
admin.site.register(Contact, ContactAdmin)
admin.site.register(Industry, IndustryAdmin)
admin.py
class Client(models.Model):
name = models.CharField(max_length=100)
class Industry(models.Model):
name = models.CharField(max_length=100)
clients = models.ManyToManyField('Client', related_name='industries', blank=True)
def get_clients(self):
return ", ".join([c.clients for c in self.clients.all()])
class Contact(models.Model):
name = models.CharField(max_length=100)
clients = models.ForeignKey(Client, related_name='contacts', blank=True, on_delete=models.CASCADE)
class ClientAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'contacts', 'industries']
class IndustryAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'get_clients']
class ContactAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'company']
admin.site.register(Client, ClientAdmin)
admin.site.register(Contact, ContactAdmin)
admin.site.register(Industry, IndustryAdmin)
我想问一下,通过在
客户端的管理列表显示中添加相关名称(即'contacts','industries'
),您想要访问什么?我们假设设置后会显示反向关系。这在django admin中是不可能的吗?通过使用常规管理页面,这是不可能的,因为它不了解如何转换查询集(即反向关系或M2M
关系),并且它与模型的字段类型不同。有一些方法可以在管理列表中显示这种类型的关系,但它们不是优化方法。假设您的关系变得更大,那么每次您想要查看此页面时,您的管理页面都会变得非常慢,并且它也会失去可读性。我们通常在对象详细信息中而不是在对象列表中显示Many2Many
和One2Many
关系。