Ich versuche, meine Benutzer Tabelle in meine Beziehungen Tabelle zu verschachteln. Anstatt also diese:Django Rest Framework Fremdschlüssel Verschachtelung
[
{
"user": 1,
"related_user": 2,
"relationship": "followed_by"
}
]
Ich versuche, dies zu erhalten:
[
{
"user": {
"username": "user1",
"name": "User 1",
"email": "bla",
"phone": "bla",
"date_joined": "2017-11-01T21:34:13.101256Z"
},
"related_user": {
"username": "user2",
"name": "User 2",
"email": "bla",
"phone": "bla",
"date_joined": "2017-11-01T21:34:13.101256Z"
},
"relationship": "followed_by"
}
]
ich Tutorien nachgeschlagen und ich versuchte das Hinzufügen serializers.RelatedField , UserSerializer(many=true, read-only=true)
etc., aber nichts funktionierte
Models.py
class User(models.Model):
username = models.CharField(max_length=255)
name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
phone = models.CharField(max_length=255)
date_joined = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):
return str(self.pk) + ", " + self.username
RELATIONSHIP_CHOICE = [
("follows", "follows"),
("followed_by", "followed_by"),
("none", "none"),
]
class Relationship(models.Model):
user = models.ForeignKey(User, related_name="primary_user", null=True)
related_user = models.ForeignKey(User, related_name="related_user", null=True)
relationship = models.CharField(max_length=40, choices=RELATIONSHIP_CHOICE, default=RELATIONSHIP_CHOICE[0])
Serializers.py
from rest_framework import serializers
from . import models
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.User
fields = (
'username',
'name',
'email',
'phone',
'date_joined',
)
class RelationshipSerializer(serializers.ModelSerializer):
related_user = UserSerializer(many=True)
class Meta:
model = models.Relationship
fields = (
'user',
'related_user',
'relationship',
'related_user'
)
Ich habe versucht, verwandte Benutzer zu meinem Serialisierer hinzuzufügen, aber es hat nicht funktioniert. Ich erhalte einen Fehler: 'Benutzer' Objekt ist nicht iterierbar
Jede Hilfe wird geschätzt.
Funktioniert gut! Ich habe mich gefragt, wie ich bestimmte Felder erscheinen lassen kann, zum Beispiel möchte ich den Benutzern keine E-Mails zeigen. Wie kann ich das tun –
die einfachste und effizienteste Möglichkeit, wie ich weiß, ist ersetzen "UserSerializer" mit "UserWithoutEmailSerializer" – Ykh