Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型字段与其他没有';不存在?_Python_Django - Fatal编程技术网

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字段
确定),该字段已经存在,因此发生冲突。这就是要点吗?