Python 在Django Rest中更新记录

Python 在Django Rest中更新记录,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,我正在学习一个Django视频教程,并在那里更新模型中的任何记录,他创建了一个视图,如下所示: Class UserProfileUpdateDetail(generics.RetrieveUpdateAPIView): model = UserProfile 通过上述方法,他可以获取Mymodel中的任何记录并更新该记录 e、 例如,通过这个url->/api/UserProfile/1/ 但是当我在我的终端使用相同的方法时,我得到了这个错误UserProfileUpdateDetai

我正在学习一个Django视频教程,并在那里更新模型中的任何记录,他创建了一个视图,如下所示:

Class UserProfileUpdateDetail(generics.RetrieveUpdateAPIView):
   model = UserProfile
通过上述方法,他可以获取Mymodel中的任何记录并更新该记录 e、 例如,通过这个url->/api/UserProfile/1/

但是当我在我的终端使用相同的方法时,我得到了这个错误
UserProfileUpdateDetail应该包含一个queryset属性,或者重写get\u queryset()方法。

我想可能是因为Django Rest版本

因此,如果我根据Rest文档更新代码:

class UserProfileUpdateDetail(generics.RetrieveUpdateAPIView):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer
然后我可以以
的形式获取任何记录,例如->/api/UserProfile/1/

但是当我试图更新这条记录时,这条记录没有得到更新。假设我更新了第一个_名称,但它说用户名已经存在(但它应该更新我获取的相同记录,但我认为它正在创建新记录)

我的完整记录:

Models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    subject = models.ManyToManyField('Subjects')
    phone = models.CharField(max_length=20)
    address = models.TextField()

    def __unicode__(self):
        return self.user.username
序列化程序.py

class UserProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    # subject = SubjectSerializer(many=True)

    class Meta:
        model = UserProfile
        fields = (
                'user',
                'subject',
                'phone',
                'address',
            )
Views.py

class UserProfileUpdateDetail(generics.RetrieveUpdateAPIView):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer
url.py

 url(r'^api/user/profile/(?P<pk>[0-9]+)/$', UserProfileUpdateDetail.as_view(), name="user-profile-update"),
url(r'^api/user/profile/(?P[0-9]+)/$),UserProfileUpdateDetail.as_view(),name=“user profile update”),
几句话:

  • 按照配置文件序列化程序的放置方式,它有一个嵌套对象:用户。DRF不支持现成的嵌套序列化程序,您必须覆盖序列化程序上的创建/更新方法,以指定如何处理它们;在此进一步阅读:

  • 我建议对用户路由和用户序列化程序进行检测,以包括概要文件序列化程序,而不是从那里序列化概要文件和用户

  • 如果你能接受它,为个人资料和用户设置一条单独的路线;在某些设计中,这很有效,因为您需要比用户定义更频繁地修改配置文件。此外,例如,对于密码重置,您将有一个单独的路由


这一期不是重复的吗?