2017-05-26 16 views
0

データベース内のテーブルとリレーションシップを構築しています。現在私は3つのテーブルでチュートリアルのレッスンを持っています。たとえば、(auth_userテーブル、partyEventテーブル、フレンドテーブル)。Owner_idをnullにすることはできません。 DRFリレーショナルデータベース

ユーザーは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

あなたはシリアライザモデルにReadOnlyFieldしており、それはDBに発表されたしたときにシリアル化オブジェクトは、所有者フィールドを除外していることを意味します。

+0

私は:)明確な理解を得ることはありません。シリアライザモデルでReadOnlyFieldを持つ別のクラスがありますが、DB –

+0

に公開されているときにオーナーIDを送信していますので間違いがあります。 https://github.com/encode/django-rest-framework/blob/a8e527a4625b48914a553256f8be2907bfcc7c99/rest_framework/serializers.py#L412 –

+0

この問題をどのように解決するか:)私はあなたの答えを理解していない –

0

シリアライザのReadOnlyFieldはデータ取得にのみ含まれているという問題があります。シリアライザを通じてデータをポストするとき、ReadOnlyFieldsは除外されます。あなたの問題を解決するため

、これを試してみてください、

class FriendsSerializer(serializers.HyperlinkedModelSerializer): 
    owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all()) 
    class Meta: 
     model = Friends 
     fields = ('id','name','owner') 
関連する問題