[英]Django: Serialize a ManyToMany relationship with a through argument via a related OneToOne model
So the subject may or may not be contextually accurate but what I do know is it involves all of the above and I'm hitting a wall... I'm looking to get a Workspace
model's owner URL directly on the Workspace
something like:因此,该主题可能在上下文中准确,也可能不准确,但我所知道的是它涉及以上所有内容,我正在碰壁......我希望直接在Workspace
上获得Workspace
模型的所有者 URL,例如:
{
"url": "http://127.0.0.1:8000/api/workspaces/1/",
"id": 1,
"name": "Ws 1",
"slug": "ws-1",
"users": [
"http://127.0.0.1:8000/api/users/2/",
"http://127.0.0.1:8000/api/users/4/"
],
"owner": "http://127.0.0.1:8000/api/users/2/"
}
Models.py模型.py
class Workspace(models.Model):
name = models.CharField(max_length=80)
users = models.ManyToManyField(UserModel, through="workspaces.WorkspaceUser", related_name="workspaces")
class WorkspaceUser(models.Mode):
user = models.ForeignKey(User, related_name="workspace_users", on_delete=models.CASCADE)
workspace = models.ForeignKey( Workspace, related_name="workspace_users",on_delete=models.CASCADE)
class WorkspaceOwner(BaseTimeStampedModel):
workspace_user = models.OneToOneField(WorkspaceUser, on_delete=models.CASCADE)
workspace = models.OneToOneField(Workspace, related_name="owner", on_delete=models.CASCADE)
Serializers.py序列化器.py
class WorkspaceSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Workspace
fields = ["url", "id", "name", "slug", "users", "owner"]
class WorkspaceUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = WorkspaceUser
fields = ["url", "id", "user"]
class WorkspaceOwnerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = WorkspaceOwner
fields = ["url", "id", "user"]
How can I best serialize the workspace.owner.workspace_user.user
url
for the HyperlinkedModelSerializer
?我怎样才能最好地为HyperlinkedModelSerializer
序列化workspace.owner.workspace_user.user
url
?
I think you can use serializers.SerializerMethodField
to get the url.我认为您可以使用serializers.SerializerMethodField
来获取 url。
class WorkspaceSerializer(serializers.HyperlinkedModelSerializer):
users = serializers.SerializerMethodField(read_only = True)
owner = serializers.SerializerMethodField(read_only = True)
class Meta:
model = Workspace
fields = ["url", "id", "name", "slug", "users", "owner"]
def get_users(self, obj):
cur_request = self.context['request']
return [UserSerializer(x, context={'request': cur_request}).data['url'] for x in obj.users]
def get_owner(self, obj):
cur_request = self.context['request']
return WorkspaceOwnerSerializer(obj.owner, context={'request': cur_request}).data['url']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.