Python Django模型字段与其他没有';不存在?
我得到了这个错误:Python Django模型字段与其他没有';不存在?,python,django,Python,Django,我得到了这个错误: ERRORS: pokollector.CustomPokemon.poke_id: (models.E006) The field 'poke_id' clashes with the field 'poke_id' from model 'pokollector.pokemon'. 以下是相关代码: class Pokemon(models.Model): poke_name = models.CharField(max_length=30) poke_
ERRORS:
pokollector.CustomPokemon.poke_id: (models.E006) The field 'poke_id' clashes with the field 'poke_id' from model 'pokollector.pokemon'.
以下是相关代码:
class Pokemon(models.Model):
poke_name = models.CharField(max_length=30)
poke_type = models.ManyToManyField(PokeType)
evolves_from = False
evolves_into = False
gen_added = models.PositiveIntegerField(validators=[min(1), max(gen)])
class Meta:
verbose_name_plural = 'Pokemon'
def __str__(self):
return self.poke_name
class CustomPokemon(Pokemon):
#Add name and level for user's specific Pokemon
poke_id = models.ForeignKey(Pokemon, on_delete=models.CASCADE,
related_name='poke_id', verbose_name='Pokemon ID')
name = models.CharField(max_length=30, blank=True)
level = models.PositiveIntegerField(blank=True, null=True)
#add owner attr
class Meta:
verbose_name_plural = 'Custom Pokemon'
def save(self):
if not self.name:
self.name = self.poke_name
super().save()
def __str__(self):
return self.name
如您所见,我有两个模型,其中一个继承自另一个。问题中的错误与CustomPokemon
中的poke\u id
字段有关。我认为这可能是继承引起的一些奇怪的冲突,但是如果我将字段名更改为pokemon\u id
,问题就解决了
虽然这样的解决方法可以让我的代码运行,但我很好奇这里的基本原理是什么;为什么在添加这三个字母后会运行完全相同的代码?是关系的名称,相反。因此,它访问给定口袋妖怪
的相关自定义口袋妖怪
对象。因此,这意味着Pokemon
有一个“隐式字段”,如果您想在这里命名为poke\u id
。由于CustomPokemon
继承自Pokemon
,因此现在有两个poke\u id
字段,因此发生冲突
但是,指定related\u name='poke\u id'没有多大意义。例如,您可以使用
custompokemons`代替:
class CustomPokemon(Pokemon):
poke_id = models.ForeignKey(
Pokemon,
on_delete=models.CASCADE,
related_name='custompokemons',
verbose_name='Pokemon ID'
)
# …
class CustomPokemon(口袋妖怪):
poke_id=models.ForeignKey(
精灵宝可梦
在_delete=models.CASCADE上,
相关_name='custompokemons',
详细名称=“口袋妖怪ID”
)
#…
注意:通常不会在
外键
字段中添加后缀\u id
,因为Django
将自动添加带有\u id
后缀的“twin”字段。因此,它应该
是pokemon
,而不是poke\u id
它确实继承了,因为
CustomPokemon
继承了Pokemon
,它也继承了字段的相关名称,因为这是字段的反向名称。好的,我想我理解了。当我创建一个ForeignKey关系时,Pokemon
模型被赋予一个名为poke\u id
的隐藏字段,该字段由CustomPokemon
中的相关\u name字段引用。当CustomPokemon
从Pokemon
继承时,它还继承了poke\u id
字段(由相关\u字段
确定),该字段已经存在,因此发生冲突。这就是要点吗?