2017-05-25 25 views
2

データベーステーブルとリレーションシップを構築しようとしています。私は3つのテーブルを持つ現時点でチュートリアルのレッスンを持っています。たとえば、(auth_userテーブル、partyEventテーブル、フレンドテーブル)。リレーショナルデータベース - Django Rest Framework

ユーザーはpartyEventを1つしか作成できません。フレンドは、ユーザーが作成した任意の数のpartyEventに参加できます。 FriendsモデルのオーナーIDは、partyEventとUser 'friend'が属していることを通知します。

partyEventを1つだけ作成するようにユーザーを制限できます。しかし、partyEventに友達を登録しようとすると、オーナーのIDは送信されません。代わりに、デフォルト値:

owner = models.OneToOneField('auth.User', related_name = 'party', on_delete=models.CASCADE, default='1') 

が送信されます。なぜそれが起こっているのですか?

モデル

class PartyEvent(models.Model): 
    name = models.CharField(max_length=100, blank=False) 
    location = models.CharField(max_length=100, blank=False) 
    owner = models.OneToOneField('auth.User', related_name = 'party', on_delete=models.CASCADE, default='1') 

class Friends(models.Model): 
    name = models.CharField(max_length=100, blank=False) 
    owner = models.ForeignKey('auth.User',related_name = 'friends', on_delete=models.CASCADE, default='1') 

シリアライザ

class FriendsSerializer(serializers.HyperlinkedModelSerializer): 
    owner = serializers.ReadOnlyField(source='owner.id') 
    class Meta: 
     model = Friends 
     fields = ('id','name','owner') 
+0

パーティーイベントに友だちを割り当てる場所はありません。友達と一緒に、あなたはオーナーかパーティーIDを提供していますか? – hurturk

+0

@ hurturk、私は友人をユーザに割り当てます。一度私は友人をユーザーに割り当て、私は友人が属しているparyEventを知ることができるでしょう。私は十分にはっきりしていることを願っています:) –

+0

あなたの 'FriendsSerializer'オーナーは' ReadOnlyField'であってはならないと思うので、あなたのビューは入力時に入力を割り当てることができます。あなたはその行をコメントアウトしようとしましたか? – hurturk

答えて

0

あなたのシリアライザフィールドのデフォルト値としてserializers.CurrentUserDefault()を割り当てることによって、現在のユーザーを設定することができます。ここにはdocの例があります:

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault() 
) 
関連する問題