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','j@j.com','j1')
user2= User.objects.create_user('Mike','m@m.com','m1')
user3= User.objects.create_user('kokoko','m@m.com','m1')
user4= User.objects.create_user('lalal','m@m.com','m1')
sub = Subscribers()
tour = Tour()
tour.id = "1"
tour.name = "hello"
tour.owner_id = user1
tour.subscribers = sub

しかし、私はこのエラーがあります:TypeError:*の後のadd()引数は、サブスクライバーではなくシーケンスでなければなりません

4

1 に答える 1

1

ManyToManyマネージャーは、

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)

お役に立てれば :)

于 2012-11-27T02:16:35.717 に答える