Django Rest框架:在发送响应之前组合来自不同模型的数据
我有一个默认的用户模型 我创建了一个userprofile模型,如下所示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
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时。我认为你应该改变这种情况。