【发布时间】:2011-06-26 08:49:27
【问题描述】:
我是 django 的新手,我对 django 的 M2M 的工作原理以及它如何与 modelForm 或表单一起工作有一些疑问。Form 目前正在开发一个包含以下模型的应用程序:
class Agent(models.Model):
user = models.ForeignKey(User)
assigned_by = models.ForeignKey('self')
date = models.DateField(auto_now_add=True)
def __str__(self):
return str(self.user)
class Region(models.Model):
name = models.CharField(max_length=50)
# Agent to Region many-to-many
class ARM2M(models.Model):
agent = models.ForeignKey(Agent)
region = models.ForeignKey(Region)
is_manager = models.BooleanField(default=False)
约束: 一个代理可以在多个区域,并且他/她可以是他/她所在的任何一个区域的经理之一。
问题#1:有没有办法用 django 模型中的多对多特性来呈现这种逻辑?
-问题结束#1-
所以我有这个 AgentForm 供代理经理在他/她的地区添加新代理。但我知道这种形式不起作用:因为在 MultipleChoiceField 中,我无法获取当前登录代理,以呈现可用区域。换句话说,我被卡住了。
class AgentForm(forms.Form):
agent = forms.IntegerField(widget=forms.HiddenInput())
regions = forms.MultipleChoiceField(choices=RAM2M.objects.filter(agent=agent, is_manager=True))
def save(self):
agent_id = self.cleaned_data['assigned_by']
agent = Agent.objects.get(pk=int(agent_id))
self.instance.assigned_by = agent
super(AgentForm, self).save()
class Meta:
model=Agent
exclude = ('assigned_by')
问题#2:如何为现有代理构建一个表单,以将新代理添加到他/她担任经理的区域。
谢谢,
格言
【问题讨论】:
标签: python django django-forms django-orm