Ich habe eine Django REST-Anwendung erstellt, die als Backend-API für ein iOS-Projekt dient. In meinem Objektmodell verwende ich "Subscription", um "User" -Objekte mit "Workspace" -Objekten zu verbinden. Hier ist ein Teil meines models.py vereinfacht:Wie serialisiert ich indirekte Beziehungen mit Abfragegruppen?
class User(models.Model):
# some property fields
class Workspace(models.Model):
# some property fields
class Subscription(models.Model):
# some property fields
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='subscriptions')
workspace = models.ForeignKey(
Workspace,
on_delete=models.CASCADE,
related_name='subscriptions')
Ich habe gebaut klassenbasierte Ansichten für die Objekte, so kann ich eine Liste der Arbeitsbereich-Objekte erhalten mit http GET von meinem iOS Frontend. Aus Gründen der Einfachheit möchte ich mehr als nur die Modellfelder einschließen, zum Beispiel in der Liste der Arbeitsbereiche, die ich für jedes Arbeitsbereichsobjekt eine Liste der abonnierten Benutzer aufnehmen möchte. Mir wurde empfohlen, SerializerMethodField() und die Abfrage-Sets für das Serialisieren des Felds zu verwenden, aber ich weiß nicht, wie die Abfragen erstellt werden. Ich habe so weit gekommen:
class WorkspaceSerializer(serializers.ModelSerializer):
subscribed_users = serializers.SerializerMethodField()
class Meta:
model = Workspace
fields = ('id', 'subscribed_users')
def get_users(self, workspace):
users = User.objects.filter(???)
serializer = UserSerializer(instance=users, many=True)
return serializer.data
Erste Abonnements in den Arbeitsbereich bezogen ist einfach, weil sie unmittelbar verbunden sind, aber wie bekomme ich Benutzer, die auf den Arbeitsbereich in Frage abonniert?