Django администратор: добавлять / редактировать вложенные модели на встроенных - PullRequest
0 голосов
/ 08 мая 2020

У меня следующие модели.

class Recipe(models.Model):
    title = models.CharField(max_length=200)


class RecipeInstruction(models.Model):
    recipe = models.ForeignKey(Recipe, related_name='instructions', on_delete=models.CASCADE)
    text = models.CharField(max_length=255)


class RecipeInstructionIngredient(models.Model):
    recipe_instruction = models.ForeignKey(RecipeInstruction, 
        related_name='instruction_ingredients', on_delete=models.CASCADE)
    text = models.CharField(max_length=50)

Рецепт содержит одну или несколько инструкций, которым необходимо следовать, и каждая инструкция относится к определенному количеству ингредиентов. Рецепт супа с лапшой может иметь инструкцию «Добавьте специи», которая может относиться к ингредиентам «перец» и «соль».

Я пытаюсь найти способ получить одну django страницу администратора из в котором я могу редактировать весь рецепт без необходимости go переходить на разные страницы для создания / редактирования разных моделей. Частично это можно сделать с помощью встроенных, но я борюсь с вложенным RecipeInstructionIngredient.

Мой текущий администратор выглядит так:

class RecipeInstructionInline(admin.TabularInline):
    model = RecipeInstruction
    extra = 1
    show_change_link = True


class RecipeInstructionIngredientInline(admin.TabularInline):
    model = RecipeInstructionIngredient
    extra = 1


class RecipeAdmin(admin.ModelAdmin):
    inlines = [
        RecipeInstructionInline,
    ]


class RecipeInstructionAdmin(admin.ModelAdmin):
    inlines = [RecipeInstructionIngredientInline]


admin.site.register(Recipe, RecipeAdmin)
admin.site.register(RecipeInstruction, RecipeInstructionAdmin)

Это создает страницу администратора, где я могу создавать / редактировать рецепт и добавьте одну или несколько инструкций на той же странице. Однако вы не можете выбрать один или несколько ингредиентов для привязки к этой инструкции. Я добавил «ссылку для изменения» к инструкциям, и когда вы go там, вы можете редактировать эту модель инструкций с помощью встроенных редактируемых инструкций-ингредиентов, но это означает, что вы покидаете страницу рецепта, и все ваши изменения там теряются.

  • Есть ли способ получить кнопки добавления / редактирования для ингредиентов-инструкций на самой встроенной инструкции?
  • Можно ли перечислить ингредиенты-инструкции для данной инструкции в инструкции на странице рецепта?
  • Есть ли другие хорошие варианты для того, чтобы рецепт, включая инструкции, включая инструкции-ингредиенты, можно было управлять на одной странице администратора?
...