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
Вернуться на верх