2011-02-13 104 views
0

我對django真的很陌生,我對django的M2M是如何工作以及它如何與modelForm或forms.Form協同工作的問題目前正在處理包含以下模型的應用程序:django manytomany和modelform

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

所以我有這個Ag​​entForm爲代理經理在他/她的地區增加一個新的代理。但我知道這種形式不起作用:因爲在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:如何構建一個形式現有代理到一個新的代理添加到他/她是經理的區域。

感謝,

馬克西姆

回答