2016-09-30 2 views
0

Was ich versuche zu erreichen, ist zu erstellen und App-Objekt über die Django REST Framework. Ich verwende ein verschachteltes Version-Objekt und verknüpfe dieses mit einem bereits vorhandenen Client.Django Serializer - Erstellen Objekt mit Beziehungen

Dies ist das Modell, das ich habe, so könnte man eine bessere Vorstellung zu bekommen:

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) 

Wie Sie Kunden sehen können Multiples Apps (1-> N) haben, und Apps mehrere Versionen haben (1 -> N)

ich habe folgendes Serializer so implementiert ich das App-Objekt mit den necessari Beziehungen schaffen kann, aber ich muss etwas falsch tun:

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 

Meine Idee ist hier die bekommen pk von "clients_data ['client']", die ich in der POST sende, holen Sie das Client-Objekt für diese PK und zuweisen Sie es für diese neue App, und danach erstellen Sie die erforderlichen Versionen.

Aber nach vielen Tests die client_id in der Datenbank kontinuierlich leer. Wie kann ich den Client korrekt zuordnen?

Antwort

0

Endlich!

Wenn es jemand anderem hilft, müssen Sie das Client-Objekt an die App übergeben, wenn Sie es erstellen!

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 
Verwandte Themen