Django Rest Framework - как вернуть внешний ключ из GenericApiView - PullRequest
0 голосов
/ 31 января 2020

В моем приложении DRF, когда я регистрирую нового пользователя, автоматически создается «проект» для этого пользователя. Мне нужно, чтобы идентификатор этого недавно созданного "проекта" был включен в данные ответа, и я не могу понять, как это сделать. Я возвращаю пользователя в ответе, но без значений для проекта.

Модель проекта:

class Project(models.Model):
    projectCode = models.CharField(max_length=10, null=True)
    projectName = models.CharField(
        max_length=100)
    user = models.ForeignKey(
        User, related_name="projects", on_delete=models.CASCADE, null=True)
    editor = models.ForeignKey(
        User, on_delete=models.CASCADE, null=True)
    creationDate = models.DateTimeField(auto_now_add=True)
    completedDate = models.DateTimeField(null=True, blank=True)
    dueDate = models.DateTimeField(null=True, blank=True)


    @receiver(post_save, sender=User)
    def create_project(sender, instance, created, **kwargs):
        if created:
            Project.objects.create(user=instance)

    @receiver(post_save, sender=User)
    def save_project(sender, instance, **kwargs):
        instance.projects.first().save()

Сериализатор регистра:

class RegisterSerializer(serializers.ModelSerializer):
    projects = serializers.PrimaryKeyRelatedField(read_only=True, many=True)

    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password',
                  'groups', 'projects')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        groups_data = validated_data.pop('groups')
        user = User.objects.create_user(**validated_data)
        for group_data in groups_data:
            user.groups.add(group_data)

        return user

И API регистрации Просмотр:

class RegisterAPI(generics.GenericAPIView):
    serializer_class = RegisterSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
        })

Это ответ, который я получаю при регистрации пользователя.

user: 
{
    id: 73,
    username: "testuserregistered",
    email: "email@email.com",
    groups: [{…}]
}

как включить внешний ключ проекта в этот ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...