ManyToMany с помощью: ForeignKey не отображается в админке
У меня есть ManyToManyField
, использующий through
:
class Entity(models.Model):
relationships = models.ManyToManyField('self', through='ThroughRelationship', blank=True)
class ThroughRelationship(models.Model):
entity = models.ForeignKey(Entity, on_delete=models.CASCADE)
name = models.CharField()
Я добавляю его в админку следующим образом:
class ThroughRelationshipInline(admin.TabularInline):
model = ThroughRelationship
extra = 3
@admin.register(Entity)
class EntityAdmin(admin.ModelAdmin):
inlines = [ThroughRelationshipInline]
Однако в панели администратора отображается только поле name
, я не могу выбрать entity
. Как это можно исправить?
Значение ThroughRelationShip
не имеет особого смысла. Даже если у вас есть ManyToManyField
для одной и той же модели, это должно подразумевать два ForeignKey
, поскольку ThroughRelationShip
по сути является "таблицей соединений" , которая связывает две сущности вместе, таким образом:
class Entity(models.Model):
relationships = models.ManyToManyField('self', through='ThroughRelationship', blank=True)
class ThroughRelationship(models.Model):
entity_from = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name='relations_by_from')
entity_to = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name='relations_by_to')
name = models.CharField()
а затем работайте с:
class ThroughRelationshipInline(admin.TabularInline):
model = ThroughRelationship
extra = 3
fk_name = 'entity_from'
@admin.register(Entity)
class EntityAdmin(admin.ModelAdmin):
inlines = [ThroughRelationshipInline]