更新Django Res中的记录

2024-10-02 02:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循一个Django视频教程,在那里更新模型中的任何记录,他创建了一个视图:

Class UserProfileUpdateDetail(generics.RetrieveUpdateAPIView):
   model = UserProfile

我可以在上面的任何模型中获取和更新 e、 例如,通过这个url->;/api/UserProfile/1/

但当我最后使用相同的方法时,我会得到这个错误UserProfileUpdateDetail should either include a queryset attribute, or override the get_queryset() method.

我想可能是因为Django Rest版本?在

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

^{pr2}$

然后我就可以以e.g., -> /api/UserProfile/1/的形式获取任何记录

但是当我试图更新这个记录时,这个记录没有更新。假设我更新了first_name,但是它说username已经存在(但是它应该更新我获取的同一个记录,但是我认为它会创建新的记录)。在

完成我的记录:

在模型.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',
            )

在视图.py在

^{pr2}$

在网址.py在

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

Tags: djangopy模型视图apiurlmodelmodels
1条回答
网友
1楼 · 发布于 2024-10-02 02:42:40

几句话:

  • 配置文件序列化程序的布局方式是,它有一个嵌套对象:用户。DRF不支持现成的嵌套序列化程序,您必须重写序列化程序上的create/update方法,以指定如何处理它们;进一步阅读:http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations

  • 我建议将用户路由和用户序列化程序插入到配置文件序列化程序中,而不是序列化概要文件,然后再从那里序列化用户。

  • 如果您可以接受它,那么为profile和user设置一个单独的路由;在某些设计中,这很有效,因为您需要更频繁地修改概要文件而不是用户定义。此外,对于密码重置,您将有一个单独的路线,例如。

相关问题 更多 >

    热门问题