2012-10-16 54 views
2

我現在生氣了 - 我無法創建新的團隊實例。 Django中始終顯示錯誤:'Team' instance needs to have a primary key value before a many-to-many relationship can be used.實例在可以使用多對多關係之前需要具有主鍵值

這裏是我的模型:

from django.contrib.auth.models import User 
from django.db import models 

class Team(models.Model): 
    name = models.CharField(max_length=10) 
    members = models.ManyToManyField(User) 

    def save(self, *args, **kwargs): 
     if self.pk: 
      # for later use 
      pass 
     super(Team, self).save(*args, **kwargs) 

現在,我想創建一個新的團隊...

from django.contrib.auth.models import User 
from models import Team 

user_obj = User.objects.get(pk=1) 
new = Team() 
new.name = 'aaa' 
new.save() 
new.members.add(user_obj) 

可能有人看到錯誤?

編輯 我讀過的文檔,這(很大)答案How to create an object for a Django model with a many to many field? - 仍然無法弄清楚什麼是錯的

+0

此代碼看起來正確。也許錯誤位於其他地方?這是你的整個代碼還是被截斷?你能發佈完整的堆棧跟蹤嗎? – Jingo

+0

有一個自定義的保存方法 - 但它只調用超級(團隊,自我)...' - 這是堆棧跟蹤:http://dpaste.com/814410/ – Thomas

+0

我能看到這種情況發生的唯一方法是,以某種方式你的save()方法沒有提交到數據庫。請包含您的自定義save()方法的代碼。 – drewman

回答

1

啊,這是你的save()方法。試試這個修復:

def save(self, *args, **kwargs): 
    obj = super(Team, self).save(*args, **kwargs) 
    if obj.id: 
     # for later use 
     pass 
    return obj 
+0

* mega face palm * thx – Thomas

1

@ INIT3的接受的答案並沒有爲我工作,因爲OBJ保持解析爲「NoneType」,換句話說,調用超級不返回任何東西。得到它的工作原理:

def save(self, *args, **kwargs): 
    super(Team, self).save(*args, **kwargs) 
    if self.pk: 
     pass 
相關問題