0
class Subscribers(User):
    date = models.DateField()
    user = models.OneToOneField(User)

class Tour(models.Model):
    """ This is not the id is a User object
    """
    owner_id = models.ForeignKey(User)
    name = models.CharField(max_length=50, primary_key=True)
    location = models.ManyToManyField(Location)
    subscribers = models.ManyToManyField(Subscribers, related_name="sub")

以下を使用してメソッドをテストしようとしています。

def test_get_subsribers(self):
    user1= User.objects.create_user('Maria','j@j.com','j1')
    user4= User.objects.create_user('Giannis','m@m.com','m1')
    sub= Subscribers()
    sub.user = user4
    tour = Tour()
    tour.owner_id = user1
    tour.name = "Open Day"
    tour.subscribers.add(sub)
    self.assertEqual(get_subscribers("Open Day").count(),0)

しかし、私が得るのはエラーです:

IntegrityError: insert or update on table "tour_tour_subscribers" violates foreign key constraint "tour_tour_subscribers_subscribers_id_fkey"
DETAIL:  Key (subscribers_id)=(10) is not present in table "tour_subscribers".

私はDjangoが初めてで、これを修正する方法がわかりません。

4

1 に答える 1

1

保存されていないサブスクライバーをツアーに追加しようとしました。

sub.save()事前に電話する必要がありますtour.subscribers.add(sub)

tourを追加する前に、 も保存する必要がありますsub

この理由は、多対多の関係を処理する追加のテーブルです ( docs を参照)。Tourこのテーブルには、 用と用の 2 つの外部キーが格納されSubscribersます。このテーブルに行を保存するには、Tour と Subscriber の両方がデータベースに存在する必要があります

于 2012-11-27T13:46:13.913 に答える