返回django rest框架中两个不同模型中包含的数据
我有两个模型:用户模型和配置文件模型。我使用用户id作为配置文件模型的外键返回django rest框架中两个不同模型中包含的数据,django,django-rest-framework,Django,Django Rest Framework,我有两个模型:用户模型和配置文件模型。我使用用户id作为配置文件模型的外键 class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True) bio = models.TextField(max_length=500, blank=True) website = models.TextField(max_length=200,
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True)
bio = models.TextField(max_length=500, blank=True)
website = models.TextField(max_length=200, blank=True)
phoneno = models.TextField(max_length=200, blank=True)
gender = models.TextField(max_length=200, blank=True)
avatar = models.ImageField('profile picture', upload_to='images/avatar/', default='/images/avatar/blank.png')
我正在使用django的内置用户模型,其中包含用户名、密码等字段
我想创建一个序列化程序,在其中我可以返回概要文件和用户模型的详细信息。到目前为止,如果我使用UserSerializer而不是下面的ProfileUserCombinedSerializer,我可以返回用户的详细信息
但是,我已经创建了ProfileUserCombinedSerializer,以便可以组合这两个值,到目前为止,我有以下内容
class UserSeralizer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('username', 'password',"email","first_name","last_name")
class ProfileUserCombinedSerializer(serializers.HyperlinkedModelSerializer):
user = ProfileSerializer()
class Meta:
model = User
fields = ('username',"user")
我如何将相应的概要文件模型附加到queryset中,以便将bio、website ect的相应字段序列化,以便我可以在可浏览的api中查看它们
class returnProfileDetailsFromUser(generics.ListAPIView):
serializer_class = ProfileUserCombinedSerializer
def get_queryset(self):
i = self.kwargs['id']
queryset = User.objects.all()
queryset = queryset.filter(id=i)
return queryset
现在我得到了以下错误:
试图获取序列化程序ProfileUserCombinedSerializer
上的字段用户
的值时,获取了AttributeError。
序列化程序字段的名称可能不正确,并且与用户
实例上的任何属性或键都不匹配。
原始异常文本为:“User”对象没有属性“User”
我做错了什么?首先,在Django rest框架中,您必须在模型中使用相关名称。将模型重写为: models.py 序列化程序.py 然后在视图中调用UserSeralizer并发送用户ID
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True, related_name = 'user_profile')
class ProfileUserCombinedSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), required=False)
class Meta:
model = Profile
fields = ("user","bio",)
class UserSeralizer(serializers.ModelSerializer):
user_profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'password',"email","first_name","last_name","user_profile",)