在Django管理界面中设置与所选模型类的关系
问题:
如何通过 Django Admin 界面动态添加从所选模型实例到任何其他 Django 模型的关系?
描述:
我想Categories通过 Django 管理界面创建。每个Category都有多个Choices分配给它。Choice(s)from givenCategory只能分配给另一个特定 Django 类(模型)的对象。让我们提供一个伪代码示例:
class Category(models.Model):
category_name = models.CharField()
class Choice(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="choices")
choice_name = models.CharField()
class ModelWithChoosableFields(models.Model):
possible_categories = ... # objects of class Category
selected_choices = ... # objects of class Choice
class Meta:
abstract = True
class Book(ModelWithChoosableFields):
...
class Animal(ModelWithChoosableFields):
...
-
Categorywithcategory_name = 'Genre'有三种可能
Choices:choice_name = 'biography',choice_name = 'thriller'
和choice_name = 'poetry'。Categorywithcategory_name = 'Animal type'有两种可能
Choices:choice_name = 'mammal'和choice_name = 'reptile'。 -
班级
Book可能有一个ChoicesfromCategory
category_name = 'Genre'分配。但是,Choicesrelated to
category_name = 'Animal type'不能分配给 classBook。类比地,类
Animal只能有Choices相关的
category_name = 'Animal type'分配给它。
换句话说,在班级实例的管理面板中,Book我希望有一种方法可以Choice从Categories适合Book班级的对象中选择对象。
我想这样做的原因是,使用 Django 管理界面的用户可以将可能的类别动态添加到所选模型(例如,Category category_name = "Conservation status"为 class添加choosable Animal),如果需要,向 Categories 添加更多选项(例如,添加另一个choice_name = 'fish'到 category_name = 'Animal type'。这种方式非常灵活对于最终管理员用户,无需更改代码中的任何内容。
我试图与通用的关系实现它-但是,它并不成功,因为据我所知一般的关系纽带给予对象(例如Category)到对象的实例任何其他类的,一般不以任何其他类(所以,使用时一般关系,为Category我必须指定与给定Book对象实例的关系,而不是Book一般的类)。
我想知道这样的行动是否可行 - 我搜索了很多但找不到任何东西。也许有更简单的方法?先感谢您!