How to serialize into multiple models using Django

2019-04-28 07:20发布

问题:

I have defined a user profile model, but want to have one api endpoint that saves all of the user data into both models. By that I mean, I am using the user model and I have a userprofile model defined as follows

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    biography = models.TextField()

when I define a serializer for creating a new user, how do I get it to serialize data into both the user model, and the userProfile model?

回答1:

You just need to define a serializer for each, and attach one to the other, as follows:

from rest_framework.serializers import ModelSerializer

class UserSerializer(ModelSerializer):
    """
    A serializer for ``User``.
    """
    class Meta(object):
        model = User


class UserProfileSerializer(ModelSerializer):
    """
    A serializer for ``UserProfile``.
    """
    user = UserSerializer()

    class Meta(object):
        model = UserProfile

You could then use UserProfileSerializer to update (or perform other actions to) a user profile and its user instance.