1

我正在浏览并检查我们项目中的各个页面,升级后大多数页面似乎都可以正常工作。但是,当我尝试在管理员中查看特定条目时,我收到此错误。查看堆栈跟踪时,一切都在 Django 的管理代码内部完成,因此我自己的代码中没有可以调试的地方。这表明 Django 管理员有问题,或者我错过了一些发行说明,这些说明是使这项工作正常工作所必需的。有任何想法吗?实际错误发生在这里:

site-packages/django/contrib/admin/helpers.py 在内容中,第 206 行

if isinstance(f.rel, ManyToManyRel) and value is not None:
    result_repr = ", ".join(map(six.text_type, value.all()))
else:
    result_repr = display_for_field(value, f)

显然,我可以进入 Django 并到处乱窜,但我不应该在新安装时这样做。任何有关查明问题的帮助将不胜感激。我现在只是盯着屏幕。

4

1 回答 1

2

正在回复 Alasdair 的评论并开始使用我们的管理代码,我能够将其缩小到导致错误的方法调用。

我们有一个通过ManyToManyFieldLead与我们的Company模型相关的模型(即一个潜在客户可以用于一个或多个公司)。Lead相关的领域Company有一个related_name“线索”。

class Company(models.Model):
    ...

class Lead(models.Model):
    companies = models.ManyToManyField(Company, blank=True, related_name='leads')
    ...

,CompanyAdmin如下所示:

class CompanyAdmin(admin.ModelAdmin):
    ...
    readonly_fields = 'leads',
    ...
    def leads(self, obj):
        ...

所以似乎发生的事情是,当我们试图从 访问leads方法时CompanyAdmin,Django 试图Lead通过相关名称访问公司的对象——引发错误的 ManyToManyField。我通过将管理员中的方法名称更改为“my_leads”解决了冲突。

看起来在 1.8 和 1.6 的最终版本之间发生了一些变化,这为相关名称和管理方法之间的潜在冲突打开了大门。解决方案,确保命名没有重叠,并且一切正常。

于 2015-08-10T18:28:38.203 回答