Django M2M / Many To Many Relationship to SELF in 1 Django Admin Inline
Я пытаюсь установить отношения "многие ко многим" на модели к самому себе. Я прочитал о настройках Symmetrical=True/False. Я действительно хочу симметрию между моделями, связанными с собой, например, если локаль1 модели Locale связана с другой локалью, локалью2, то у локали2 должна быть ссылка для получения локали1. Ниже показано, как у меня настроены модели Locale и модель Many To Many/Table RelatedLocale.
При просмотре в Django Admin, локаль1 покажет связь с локалью2, но при просмотре локали2, она не показывает локаль1.
Я должен сделать 2 отдельных инлайна, чтобы учесть, что 'core.RelatedLocale' имеет более одного ForeignKey к 'core.Locale'. Вы должны указать атрибут 'fk_name' возникает ошибка, потому что Django сбит с толку тем, что он указывает на самого себя.
Есть ли способ заставить m2m показывать себя только в 1 строке на обоих объектах?
Django 3.2.x
оболочка
>>> locale1.related_locales.set([locale2])
>>> locale1.related_locales.all()
<QuerySet [<Locale: Locale object (<locale2>)>]>
>>> locale2.related_locales.all()
<QuerySet []>
Модели:
class Locale(models.Model):
"""Locale to be used for everything on the Aspiria Campus"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
related_locales = models.ManyToManyField(
"self", through='RelatedLocale')
class Meta:
db_table = 'locale'
class RelatedLocale(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
locale = models.ForeignKey(
Locale, on_delete=models.CASCADE, db_column='locale_id')
related_locale = models.ForeignKey(
Locale, related_name="related_locale", on_delete=models.CASCADE, db_column='related_locale_id')
is_parent = models.BooleanField(default=False)
class Meta:
db_table = "related_locale"
def __str__(self):
return "%s related" % self.locale.name