所以我正在尝试为数据库构建模型,该数据库读取具有给定数据格式的.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')
正如您所看到的,当涉及到related_name时,我有点无能为力。无论如何,运行已经解析过这个数据的测试会给我一个错误
AttributeError:'ManyToManyField'对象没有属性'_m2m_reverse_name_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")
答案 0 :(得分:0)
如果您将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
并在此之后应用