Как сделать рекурсивные админские отношения с Django? - PullRequest
1 голос
/ 18 октября 2019

Мне нужно создать сколь угодно глубокую модульную структуру, используя администратор Django. Пакет nested_admin помог мне справиться с этой задачей, но есть еще одна ключевая функциональность, которая все еще ускользает от меня - возможность создать объект B, встроенный в объект A, а затем создать еще один объект A из этого экземпляра. объекта B. Вот внимательный взгляд на мои модели (упрощенно):

class ChatConditional(models.Model):
    triggering_question = models.ForeignKey(
        'texts.MessageChain',
        on_delete=models.CASCADE,
    )
    keyword = models.CharField(max_length=50, blank=False, null=False)
    keyword_response = models.ForeignKey(
        'texts.MessageChain',
        related_name='keyword_answer',
        on_delete=models.CASCADE,
    )

class MessageChain(models.Model):
    conditional_trigger = models.ForeignKey(
        'texts.ChatConditional',
        blank=True, null=True,
    )
    message = models.TextField(max_length=160, blank=True, null=True)

Итак, в админе я хочу иметь возможность создать ChatConditional, который будет служить ответом на определенную MessageChain. Затем, как только я создаю это Условие, создайте еще одну MessageChain для отправки, которая потенциально будет ссылаться на другое Условие. Вот как выглядят мои модели администратора:

class SMSConditionalAdmin(nested_admin.NestedStackedInline):
    model = ChatConditional
    extra = 0
    fk_name = "triggering_question"
    inlines = [SMSChainAdmin]

class SMSChainAdmin(nested_admin.NestedStackedInline):
    model = MessageChain
    extra = 0
    inlines = [SMSConditionalAdmin]

И теперь вы, вероятно, можете увидеть проблему: чтобы полностью определить SMSConditionalAdmin, мне нужно установить встроенное отношение к SMSChainAdmin и наоборот. Возможно, я упускаю что-то очевидное, но как я могу обойти эту потребность, чтобы два встроенных админа рекурсивно ссылались друг на друга?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...