这就是我的模型的样子:
class GameStates(models.Model):
state_code = models.CharField(max_length=20)
state_name = models.CharField(max_length=100)
order = models.IntegerField()
allowed_states = models.ManyToManyField('GameStates', related_name='allowed_states_admin')
def __str__(self):
return self.state_code
allowed_states
有一个many-to-many
循环引用GameStates
。该字段包含以下信息:给定用户所处的当前状态,允许他进入的其他状态是什么。
我正在尝试在Admin
上注册此模型,如下所示:
class GameStatesInline(admin.TabularInline):
model = GameStates.allowed_states.through
@admin.register(GameStates)
class GameStatesAdmin(admin.ModelAdmin):
inlines = [GameStatesInline]
exclude = ('allowed_states',)
但是,我不断收到以下错误消息:
GameStates_allowed_states' has more than one ForeignKey to 'GameStates'.
非常感谢您的帮助!!
答案 0 :(得分:1)
如果从Model1到Model2创建ManyToManyField,则through表将有一个到Model1的ForeignKey和一个到Model2的ForeignKey。
由于您正在从GameStates到GameStates创建ManyToManyField,因此直通表将有2个ForeignKeys到GameStates。除非这些ForeignKey关系具有'related_name',否则无法准备此模型类。
如果您使用“GameStates.allowed_states.through”通过表生成,则它将没有ForeignKey字段的相关名称。
我认为您需要通过writing another class通过表定义并在与通过表对应的模型的ForeignKeys中指定related_name
class AllowedStates(models.Model):
game_state = models.ForeignKey('GameState', related_name='something')
allowed_state = models.ForeignKey('GameState', related_name='something_else')
您可以在Admin
中注册AllowedStates