Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架:在发送响应之前组合来自不同模型的数据_Django_Python 3.x_Django Rest Framework - Fatal编程技术网

Django Rest框架:在发送响应之前组合来自不同模型的数据

Django Rest框架:在发送响应之前组合来自不同模型的数据,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,我有一个默认的用户模型 我创建了一个userprofile模型,如下所示 from django.contrib.auth.models import User from django.db import models from django.db.models.signals import post_save from users.utils.age_validator import MinAgeValidator from django.core.validators import MaxV

我有一个默认的用户模型

我创建了一个userprofile模型,如下所示

from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from users.utils.age_validator import MinAgeValidator
from django.core.validators import MaxValueValidator, MinValueValidator


class UserProfile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    mobile_number = models.IntegerField(blank=True, unique=True, null=True)
    profile_image = models.ImageField(upload_to="proile_image", blank=True)

    def __str__(self):
        return self.user.username

    def create_profile(sender, **kwargs):
        if kwargs['created']:
            user_profile = UserProfile.objects.create(user=kwargs['instance'])

    post_save.connect(create_profile, sender=User)
{
    "count": 11,
    "next": "http://127.0.0.1:8000/user/userprofile/finduser/?limit=5&offset=5&search=a",
    "previous": null,
    "results": [   

        {
            "id": 43,
            "username": "pikachu",
            "first_name": "",
            "last_name": ""
        },
}



有一个搜索视图,如下所示


class FindUser(ListAPIView):
    permission_classes = [IsAuthenticated]
    search_fields = ['username', 'first_name', 'last_name']
    queryset = User.objects.all()
    serializer_class = FindUserSerializer
    filter_backends = (filters.SearchFilter,)
    pagination_class = SearchLimitPagination

然后我定义了序列化程序来组合来自两个模型的数据


class UserProfileImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserProfile
        fields = ('profile_image',)
        read_only_fields = ['profile_image']


class FindUserSerializer(serializers.ModelSerializer):

    image = UserProfileImageSerializer(read_only=True)
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name','image')

问题与此类似。但这对我不起作用。它不会给出错误,但会给出一个没有配置文件数据的响应,如下所示

from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from users.utils.age_validator import MinAgeValidator
from django.core.validators import MaxValueValidator, MinValueValidator


class UserProfile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    mobile_number = models.IntegerField(blank=True, unique=True, null=True)
    profile_image = models.ImageField(upload_to="proile_image", blank=True)

    def __str__(self):
        return self.user.username

    def create_profile(sender, **kwargs):
        if kwargs['created']:
            user_profile = UserProfile.objects.create(user=kwargs['instance'])

    post_save.connect(create_profile, sender=User)
{
    "count": 11,
    "next": "http://127.0.0.1:8000/user/userprofile/finduser/?limit=5&offset=5&search=a",
    "previous": null,
    "results": [   

        {
            "id": 43,
            "username": "pikachu",
            "first_name": "",
            "last_name": ""
        },
}



我正在使用django 2.7在序列化程序中添加source='userprofile',如下所示

class FindUserSerializer(serializers.ModelSerializer):

    image = UserProfileImageSerializer(source='userprofile', read_only=True)

    .....
    .....

未经测试,但现在应该可以工作。

它可以工作,但当我在用户界面中添加userprofile时。我认为你应该改变这种情况。