我有三种模式:书籍,语言和选项。有预定义的书籍集(Master和Margarita,The Rose of the Rose等)和语言(英语,德语,法语等)。每个Book实例都有一个预定义的Languages子集(ManyToMany关系)。选项模型包含Book字段(作为ForeignKey)和Languages字段(ManyToMany)。我想构建一个允许用户选择任何书籍的表单,并且(在选择之后)动态过滤语言queryset以仅显示与本书相关的子集。 Django有可能吗?
相关型号:
class Book (models.Model):
title = models.CharField (max_length = 128)
languages = models.ManyToManyField (Language, related_name = 'available_languages')
class Language (models.Model):
name = models.CharField (max_length=64)
abbreviation = models.CharField (max_length=4)
class Options (models.Model):
book = models.ForeignKey (Book, help_text = 'Text', null = True, blank = True)
languages = models.ManyToManyField (Language, related_name = 'languages', help_text = 'Languages')
答案 0 :(得分:1)
您可以通过多种方式执行此操作,其中一种最简单的方法是使用django-smart-selects应用,如果您正在使用django admin,则可以非常好地集成。您所要做的就是install the app并更新您的模型:
from smart_selects.db_fields import ChainedManyToManyField
class Options (models.Model):
book = models.ForeignKey(Book, help_text='Text', null=True, blank=True)
languages = ChainedManyToManyField(Language, related_name='languages', help_text='Languages'
chained_field="book",
chained_model_field="languages")
答案 1 :(得分:0)
您可以通过AJAX进行制作。当用户选择一本书时,您可以在Django中调用您的视图的URL。
视图将生成一个用户选择的书籍ID的表单,然后它将只返回所需表单的html。然后,在ajax成功中,您将html表单放在您想要的位置。