Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-ManyToManyField反向关系问题_Python_Django_Model - Fatal编程技术网

Python Django-ManyToManyField反向关系问题

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' 在尝试创建联系人而不设置客户端时,可能会

我有3种型号,
行业
有一个
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
关系。