Python Django:用户选择时带有过滤器的动态内联表单
我创建了以下模型:Python Django:用户选择时带有过滤器的动态内联表单,python,django,forms,inline-formset,Python,Django,Forms,Inline Formset,我创建了以下模型: class Service(models.Model): name = models.CharField(blank=False, max_length=200)code here class Monitor(models.Model): name = models.CharField(blank=False, max_length=100) services = models.ManyToManyField(Service, related_nam
class Service(models.Model):
name = models.CharField(blank=False, max_length=200)code here
class Monitor(models.Model):
name = models.CharField(blank=False, max_length=100)
services = models.ManyToManyField(Service, related_name='monitors')
class Student(models.Model):
name = models.CharField(blank=False, max_length=100)
class ServiceMonitors(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
service = models.ForeignKey(Service, on_delete=models.CASCADE)
monitors = models.ManyToManyField(Monitor)
这些模型代表了一家为学生提供多种服务的公司。为这家公司工作的班长被分配给需要他们提供服务的学生。班长可以提供多种服务,每种服务都有许多学生。此外,学生可以有许多服务和监视器
假设我们有3个服务,s1、s2和s3。当我们创建一个新的监视器时,我们会为他/她分配一些服务,比如s1和s3。然后,当我们创建一个新学生时,我们应该能够选择学生将拥有哪些服务和监视器
我这里的问题是,我需要一个表单来创建学生(姓名、电话等),该表单允许我:
我对Django很陌生。我已经能够在用户创建表单中创建一个内联表单,但是我被困在这里了。我现在有一个下拉控件来选择一个服务,还有一个ModelMultipleChiceField,它带有一个复选框SelectMultiple小部件,显示所有监视器。从这里,我需要知道当用户选择服务时如何过滤这些监视器,以及如何添加新表单以选择新的服务/监视器。这可能无法在Django表单框架内进行管理,Django表单框架的功能非常有限。它允许您在ModelChoiceDropDown(我想这就是名称)中使用过滤查询集进行选择,但是在选择之后进行过滤是不可能的。Django的表单是以HTML的形式生成和发送的,如果不做很多修改,就无法进行过滤 这样做的方法可能是设置一个REST接口(请参阅Django REST Framework或Django Tastypie),并使用您选择的前端框架将下拉列表链接到该接口(我更喜欢Backbone.js,但有很多选项)。其想法是,一旦您选择了一项服务,随后的下拉列表将在其请求中添加一个过滤器,以仅显示提供该服务的监控器 如果您希望继续使用Django表单,您可以这样做,但您需要扩展默认字段以获得此类功能
这是一个相当大的兔子洞,我手头没有任何资源可以告诉你。但是阅读REST接口是一个很好的开始。谢谢你,唐,我想我会尝试使用自定义表单和一些JS。将尝试将所有服务显示为复选框,并在用户选择服务时显示相关监视器。通过这种方式,我可以将过滤后的所有信息发送到客户端。