2017-09-28 5 views
1

Ich habe die folgende Situation: Ein Benutzer kann mehr als ein Profil haben. Hier ist meine Modelklasse. So etwas wie dieses Beispiel:Django restframework: Wie zwei Modelle Queryset serialisieren?

models.py:

class Profile: 
    name=models.Charfield() 

class UserProfile: 
    user=models.ForeignKey(User) 
    profile = models.ForeignKey(Profile) 

serializers.py:

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = '__all__' 

Hier bin ich Rückkehr alle meine Nutzer von JSON, aber ich möchte Fügen Sie ein neues Feld namens Profile hinzu, das alle IDs zurückgibt, die der Benutzer hat.

{ "id": 1, 
    "name" : "John" 
    .... 
    profiles = [1, 2] 
} 

Wie kann ich alle Profile, die der Benutzer hat, abfragen (abfragen) und sie zu meinem endgültigen JSON hinzufügen?

Antwort

0

1) Vereinfachte Beziehungen - Nur Benutzer- und Profilmodelle In diesem Fall müssen Sie keine explizite Beziehung in der UserProfile-Tabelle speichern, da dies im Profilmodell möglich wäre, solange Sie keine Benutzer benötigen um Profile mit anderen Benutzern zu teilen.

2) Erstellen ProfileSerializer

3) In Profile Feld mit vielen = True Eigenschaft UserSerializer & Referenz zur Verfügung stellen in 'Quelle' Eigenschaft Bitte reffer auf diese Dokumente, wie sie http://www.django-rest-framework.org/api-guide/serializers/

Eine andere wirklich gut sind Was zu erwähnen ist, erstellen UserProfile ist entzogen und in neuen Versionen von Django können Sie grundlegende Benutzermodell mit der Einstellung Eigenschaft AUTH_USER_MODEL

3

auf dem UserSerializer deklarieren das Feld zu erweitern Profil als PrimaryKeyRelatedField

profiles = serializers.PrimaryKeyRelatedField()

Standardmäßig wird dieses Feld read-write, obwohl Sie dieses Verhalten der read_only Flag verwendet ändern können.

siehe docs

Verwandte Themen