2016-09-30 16 views
0

私が達成しようとしているのは、Django RESTフレームワークを通してAppオブジェクトを作成することです。私は、入れ子になったバージョンのオブジェクトを使用して、これを既存のクライアントに関連付けます。Djangoシリアライザ - リレーションを持つオブジェクトを作成する

あなたがより良いアイデアを得ることができるようにこれは、私が持っているモデルである:あなたはクライアントが倍数のアプリ(1> N)を持つことができる見ることができ、およびアプリは(複数のバージョンを持つことができたよう

class Client(models.Model): 
    client = models.CharField(max_length=200) 
    mail = models.CharField(max_length=200, null=True) 


class Keyword(models.Model): 
    keyword = models.CharField(max_length=200) 
    client = models.ForeignKey(Client, related_name='client_keywords',on_delete=models.CASCADE) 

class App(models.Model): 
    client = models.ForeignKey(Client, related_name='client_apps', on_delete=models.CASCADE) 
    appname = models.CharField(max_length=200, unique=True) 

class Version(models.Model): 
    apps = models.ForeignKey(App, related_name='version',on_delete=models.CASCADE) 
    version = models.CharField(max_length=20, null=True) 

を1 - > N)

私はので、私はnecessari関係でAppオブジェクトを作成することができ、次のシリアライザを実装しましたが、私は何か間違ったことをやっている必要があります。ここ

class AppSerializer(serializers.ModelSerializer): 
    version = VersionSerializer(many=True) 
    client = ClientSerializer() 

    class Meta: 
     model = App 
     fields = ('pk','client',..., 'version') 

    def create(self, validated_data): 
     versions_data = validated_data.pop('version') 
     clients_data = validated_data.pop('client') 
     app = App.objects.create(**validated_data) 
     app.client = Client.objects.get(pk=clients_data['client']) 
     for version_data in versions_data: 
      Version.objects.create(apps=app, **version_data) 
     return app 

私の考えでは得ることです私はPOSTで送信している "clients_data ['client']"のpkから、そのPKのクライアントオブジェクトを取得し、この新しいアプリケーションのためにそれを割り当て、その後、必要なバージョンを作成します。

しかし、多くのテストの後、データベースのclient_idは空のままです。どのようにクライアントを正しく割り当てることができますか?

答えて

0

最後に!

他の人に役立つ場合は、作成時にクライアントオブジェクトをアプリに渡す必要があります。

class AppSerializer(serializers.ModelSerializer): 
    version = VersionSerializer(many=True) 
    client = ClientSerializer() 

    class Meta: 
     model = App 
     fields = ('pk','client',..., 'version') 

    def create(self, validated_data): 
     versions_data = validated_data.pop('version') 
     clients_data = validated_data.pop('client') 
     clients_info = Client.objects.get(pk=clients_data['client']) 
     app = App.objects.create(client=clients_info,**validated_data) 

     for version_data in versions_data: 
      Version.objects.create(apps=app, **version_data) 
     return app 
関連する問題