Python Django model ForeignKey在尝试使用ManyToManyField时向后引用和属性错误

Python Django model ForeignKey在尝试使用ManyToManyField时向后引用和属性错误,python,django,Python,Django,因此,我试图为一个数据库构建模型,该数据库读取一个具有给定数据格式的.xml文件,但在设置向后兼容性时遇到了问题 我的模特是 from django.db import models class Continent(models.Model): name = models.CharField(max_length=60, default='', unique=True) code = models.CharField(max_length=3, default='')

因此,我试图为一个数据库构建模型,该数据库读取一个具有给定数据格式的.xml文件,但在设置向后兼容性时遇到了问题

我的模特是

from django.db import models

class Continent(models.Model):
    name = models.CharField(max_length=60, default='', unique=True)
    code = models.CharField(max_length=3, default='')


    countries = models.ManyToManyField(
        'Continent',
        through='Country',
    )


class Country(models.Model):

    name = models.CharField(max_length=60, default='', unique=True)
    code = models.CharField(max_length=3, default='', unique=True)
    capital = models.CharField(max_length=60, default='')
    population = models.PositiveIntegerField(default=0)
    area = models.PositiveIntegerField(default=0)
    continent = models.ForeignKey(Continent, default='', related_name='related_name')
正如你们所看到的,当涉及到相关的名字时,我有点不知所措。无论如何,运行一个已经解析了这些数据的测试会给我带来错误

AttributeError:“ManyToManyField”对象没有属性“\u m2m\u reverse\u name\u cache”

但我不确定该如何消除它

测试尝试运行

fi = europe.countries.get(code="fi")
如果它找不到任何相关数据(数据包含了每个大陆和国家),则会引发一个例外,因此反向引用到目前为止还不起作用

编辑: 这是测试中引发异常的部分

def testCountryThroughContinent(self):

        europe = Continent.objects.get(code="eu")
        try:
             sw = europe.countries.get(code="sw")
        except:
             self.assertTrue(False, "Getting country failed. Did you remember that countries should be accessed through attribute countries?")
        self.assertEqual(sw.name, "Sweden", "Getting a country from a continent")

如果您使用FK从国家/地区到欧洲大陆,则不需要额外的M2M

from django.db import models

class Continent(models.Model):
    name = models.CharField(max_length=60, default='', unique=True)
    code = models.CharField(max_length=3, default='')

class Country(models.Model):
    name = models.CharField(max_length=60, default='', unique=True)
    code = models.CharField(max_length=3, default='', unique=True)
    capital = models.CharField(max_length=60, default='')
    population = models.PositiveIntegerField(default=0)
    area = models.PositiveIntegerField(default=0)
    continent = models.ForeignKey(Continent, related_name='countries')

别忘了做
makemigrations
,然后应用它们

在现实生活中你到底想实现什么?鉴于名称,您的方法看起来过于复杂。在这一阶段,我只是尝试为数据库创建模型,并且我已经获得了一个预制测试函数,以确保它能够正常工作。我现在只有一个例外,我将把它编辑到问题中,我需要大陆类具有属性“countries”,但是,大陆内的国家将存储在哪里code@Grak是的,我理解这一点,这是通过添加您已经完成的ForeignKey国家/地区模型来实现的。如果你使用这个模型,你可以做
fi=europe.countries.get(code=“fi”)
Ah,所以相关的名称必须是'countries',这样大陆类才能获得属性,我明白了。谢谢(之前没有注意到名称的更改)