Ich habe derzeit zwei relevante Klassen in meinem Modell: Eine UserProfile
Klasse und eine FriendInvite
Klasse in models.py
Wie kann ich eine asymmetrische Viele-zu-Viele-Selbstbeziehung für beide Parteien in einer Django-Ruheantwort bekommen?
class UserProfile(models.Model):
user = models.OneToOneField(User)
username = models.TextField()
friends = models.ManyToManyField('self',through='FriendInvite',
symmetrical=False)
class FriendInvite(models.Model):
sender = models.ForeignKey(UserProfile,related_name='fi_sender')
invitee = models.ForeignKey(UserProfile,related_name='fi_invitee')
status = models.IntegerField(default=0)
def __str__(self):
return '%s invites %s' % (self.sender.username,self.invitee.username)
In serializers.py
:
from rest_framework import serializers
from myapp.models import UserProfile
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
Und in views.py
:
from rest_framework import generics
from myapp.models import UserProfile
from myapp.serializers import UserProfileSerializer
class UserProfileList(generics.ListAPIView):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
I generierte 5 verschiedene Benutzer und 3 verschiedene Freundschaftsbeziehungen. Allerdings, wenn ich die JSON-Antwort vom Server empfangen, nur es die Benutzer enthalten, die die Einladungen verschickt, nicht diejenigen, die sie erhalten haben:
[{"id":1,"username":"U1","user":1,"friends":[5]},
{"id":2,"username":"U2","user":2,"friends":[]},
{"id":3,"username":"U3","user":3,"friends":[4]},
{"id":4,"username":"U4","user":4,"friends":[]},
{"id":5,"username":"U5","user":5,"friends":[2]}]
In diesem Fall U1 gesendet ein bis U5, U3 bis U4 laden und U5 bis U2. Wie kann ich Ergebnisse für sowohl gesendete als auch empfangene Einladungen für Nutzer erhalten?
Warum haben Sie 'symmetric = False' in' friends' M2M Field gesetzt? Wenn U1 ein Freund von U5 ist, wird U5 dann kein Freund von U1 sein? –
Django ließ mich keine symmetrische Beziehung mit einem Through-Argument/Beziehung für die Modelle definieren. –