繁体   English   中英

FieldDoesNotExist:ManyToManyField 没有名为 None 的字段

[英]FieldDoesNotExist: ManyToManyField has no field named None

我在 Django 1.8.8 中有两个模型:

class Company(models.Model):
    name = models.CharField(max_length=200)
    members = models.ManyToManyField(User)
class Folder(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(null=True, blank=True)
    company = models.ForeignKey(Company, null=True, blank=True)
    parent = models.ForeignKey("Folder", null=True, blank=True)

当我在模板中做

{% for user in current_folder.company.members.all %}

我有时(在重新加载几页后随机)收到非常奇怪的错误:

FieldDoesNotExist: Company_members has no field named None

我也使用 sqlite3 数据库。 任何人都知道问题出在哪里?

这很可能是您应该检查的相关 django 票https://code.djangoproject.com/ticket/24513

这个问题可能有某种关联,虽然不是 100% https://github.com/jet-admin/jet-django/issues/7

阅读这些主题,您可能会有所了解。

如果要从实例访问 ForeignKey 字段,则无法像此处那样直接访问它

{% for user in current_folder.company.members.all %}

ForeignKey 字段是一家公司,所以它应该是

current_folder.company_set()

注意:ForeignKey 返回一组对象。 在你的情况下,一组公司。 这就是它返回FieldDoesNotExist的原因

在 ManyToManyFields 中,如果要访问相关对象,则必须添加related_name参数。 所以对于这种情况,应该是这样的:

class Company(models.Model):
    name = models.CharField(max_length=200)
    members = models.ManyToManyField(User, related_name='members')
class Folder(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(null=True, blank=True)
    company = models.ForeignKey(Company, null=True, blank=True)
    parent = models.ForeignKey("Folder", null=True, blank=True)

尝试添加空字段和空白字段

members = models.ManyToManyField(user, blank=True, null=True)

数据库中可能有重复的项目。

您可以使用以下方法列出模型中的所有项目来进行检查:

YourModel.objects.values_list('id', 'name')

为避免这种情况,请确保设置 unique=True。

name = models.CharField(max_length=200, unique=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM