2010-12-09 64 views
0

我是Django的新手,需要一些關於我得到的視圖錯誤的幫助。django ModelForm保存與ManyToManyField的問題

我寫了一個視圖,如果請求方法是GET,將顯示「Groups」的數據表;如果請求方法是POST,則顯示錶單以編輯特定的「Group」數據)。

而且,如果POST在現有的項目,我想形式來預先填入我已經在表中該項目的數據。我已經差不多了了這一切,除了當我轉到保存編輯後的形式,我不斷收到此錯誤:

「無法在ManyToManyField指定的中介模式設定值」

任何幫助將是不勝感激。另外,我對所有這些網絡開發工具都很陌生,所以如果我正在做一些完全愚蠢的事情,或者錯過了一個概念,請隨時根據我的想法對我進行處理。 ;-)

型號

class Alias(models.Model): 
    def __unicode__(self): 
     return unicode(self.alias) 
    alias = models.CharField(max_length=32) 

class Octet(models.Model): 
    def __unicode__(self): 
     return unicode(self.num) 
    num = models.IntegerField(max_length=3) 

class Group(models.Model): 
    def __unicode__(self): 
     return unicode(self.name) 
    name = models.CharField(max_length=32) #name of the group 
    id = models.AutoField(primary_key=True) #primary key 
    octets = models.ManyToManyField(Octet, through='OctetAssignment', blank=True) #not required 
    aliases = models.ManyToManyField(Alias, through='AliasAssignment', blank=True) #not required 

class OctetAssignment(models.Model): 
    octet = models.ForeignKey(Octet) #octet 
    group = models.ForeignKey(Group) #group that octet is assigned to 

class AliasAssignment(models.Model): 
    alias = models.ForeignKey(Alias) 
    group = models.ForeignKey(Group) 

查看

def index(request): 
    if request.method == 'GET': 
     groups = Group.objects.all().order_by('name') 
     return render_to_response('groups.html', 
            { 'groups': groups, }, 
            context_instance = RequestContext(request), 
           ) 

    elif request.method == "POST": 
     g = Group.objects.get(id=request.POST['id']) 
     form = GroupEditForm(instance=g) 
     return render_to_response('groups.html', 
           { 'form': form, }, 
           context_instance = RequestContext(request), 
           ) 

def save(request): 
    if request.method == "POST": 
     form = GroupEditForm(request.POST) 
     if form.is_valid(): 
      form.save() 

     return HttpResponseRedirect('/tradedesk/groups/') # Redirect after POST 

爲了使其完整,這裏是我使用的渲染表和編輯頁面的表單模板代碼。 模板

<h1>Group Information</h1> 

    {% if groups %} 
     <table border=1> 

     {% for group in groups %} 

     <tr> 

     <td>{{group.name}}</td> 

     <td>{% for octet in group.octets.all %} {{octet}} {% endfor %}</td> 

     <td>{% for alias in group.aliases.all %} {{alias}} {% endfor %}</td> 

     <td>{{group.analyst}}</td> 

     </tr> 

     {% endfor %} 

     </table> 
    <br></br> 

    <form method="post" action="/groups/">{% csrf_token %} 
    <select name="id" > 
     {% for group in groups %} 
     <option value="{{group.id}}">{{group.name}}</option> 
     {% endfor %} 
    </select> 
    <input type="submit" value="Edit"> 

    </form> 
    {% endif %} 


    {% if form %} 
    <form method="post" action="/groups/save/">{% csrf_token %} 

     {{form}} 
    <br></br> 
    <input type="submit" value="Save"> 
    <form> 

    {% endif %} 



</div> 

回答

1

嘗試刪除中介模型OctetAssignment和AliasAssignment。只有在您想向其添加自定義字段時才應使用它們。否則,Django創建它們並自己透明地使用它們。

+0

沒有骰子,沒有工作。它實際上破壞了我的數據表在GET視圖。 – nnachefski 2010-12-10 13:19:48