我正在开发一个 DIY 应用程序(Django 1.5),但遇到了障碍。涉及的主要模型有Guide
、Tool
、Item
、Step
。一个指南可以有许多工具和项目,一个工具或项目可以属于许多指南。一个步骤也是如此——它可以有许多工具和项目,一个工具或项目可以属于许多步骤。一个指南有许多步骤,一个步骤属于一个指南。
引导多对多项目
引导多对多工具
指导一对多步骤
步进多对多项目
步进多对多工具
路障...
在指南级别,我希望工具和项目选项是无限的。但在步骤级别,我希望将工具和项目选项限制为分配给它所属的指南的选项。基本上,在创建/编辑步骤时,我想列出通过指南可用的所有工具和项目的复选框。用户选择当前步骤所需的那些。每个步骤都有不同的工具和项目组合(因此需要复选框)。
我发现了ModelMultipleChoiceField
Step 的 ModelForm 类。在那里我可以指定一个查询集。 但是,如何访问 Guide 模型的实例以检索其工具和项目,以便我可以正确构建选择? 我想提供类似于您在视图中所做的查询...
Guide.objects.get(pk=n).tools.all()
Guide.objects.get(pk=n).items.all()
我怎样才能做到这一点ModelMultipleChoiceField
?我希望我能够清楚地解释这一点。
提前感谢您的帮助。
class Tool(models.Model):
name = models.CharField(max_length=100)
...
class Item(models.Model):
name = models.CharField(max_length=100)
...
class Guide(models.Model):
models.CharField(max_length=100)
description = models.CharField(max_length=500)
tools = models.ManyToManyField(Tool, null=True, blank=True)
items = models.ManyToManyField(Item, null=True, blank=True)
...
class Step(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
guide = models.ForeignKey(Guide)
tools = models.ManyToManyField(Tool, null=True, blank=True)
items = models.ManyToManyField(Item, null=True, blank=True)
编辑:5/2
进一步阅读后,看起来我必须重写 的__init__
方法ModelMultipleChoiceField
,我在其中获得对 的引用self.instance
,从而允许我创建查询,例如,self.instance.guide.tools.all()
和self.instance.guide.items.all()
。然后通过创建字段fields['field_name']
。
我现在在工作,所以我要等到今晚晚些时候才能试一试。我会报告我的发现。