2012-11-27 23 views
4
class Subscribers(User): 
    date = models.DateField() 
    user = models.OneToOneField(User) 

class Tour(models.Model): 
    owner_id = models.ForeignKey(User) 
    name = models.CharField(max_length=50) 
    location = models.ManyToManyField(Location) 
    subscribers = models.ManyToManyField(Subscribers, related_name="sub") 

我试图做到这一点在另一个文件:类型错误:添加()*后的参数必须是一个序列,而不是认购

user1 = User.objects.create_user('John','[email protected]','j1') 
user2= User.objects.create_user('Mike','[email protected]','m1') 
user3= User.objects.create_user('kokoko','[email protected]','m1') 
user4= User.objects.create_user('lalal','[email protected]','m1') 
sub = Subscribers() 
tour = Tour() 
tour.id = "1" 
tour.name = "hello" 
tour.owner_id = user1 
tour.subscribers = sub 

但我有此错误: 类型错误:加() *后的参数必须是一个序列,而不是认购

回答

1

的多对多经理假定,当你做

tour.subscribers = sub 

subSubscribers的序列(元组,列表,查询集),而不是单个对象。然后这样做和完全一样:

tour.subscribers.add(*sub) 

而且由于sub不是一个序列,所以会引发这样的错误。我建议先保存并稍后添加。我想这也是更具可读性,但它可能只是我的意见:

sub = Subscribers() 
tour = Tour() 
tour.id = "1" 
tour.name = "hello" 
tour.owner_id = user1 
tour.save() 
tour.subscribers.add(sub) 

希望这有助于:)

+0

我都试过,但我得到ValueError异常:无法添加“<认购人:>”:实例在数据库“默认”,值是在数据库“无” – user1855165

+0

这是因为你正在试图添加订阅者之前保存巡回演唱会,我以前有这样的问题:) – Gerard

+0

谢谢我同意,它看起来更好,并解决序列的问题!!但先保存并不能解决一般问题! – user1855165

相关问题