gpt4 book ai didi

django - (Django)在 Django Rest Framework 中将 auth.User 表与 app.UserProfile 与基于类的 View 相结合

转载 作者:行者123 更新时间:2023-12-01 15:27:48 24 4
gpt4 key购买 nike

我需要通过 Django Rest API 创建 User 实例。普通的 Django 内置 User 需要扩展,最常见的是 UserProfile 模型。因此,User 对象必须在 API 中用单独的表表示 UserUserProfile

我假设我可以创建一个基于函数的 View ,它结合了来自 UserUserProfile 序列化程序的序列化数据,但我真的很想知道这是否可能使用基于类的 View 做同样的事情。它需要有两个查询集和 serializer_classes,这可能吗?

最佳答案

您可以使用一个简单的 APIView 来实现这一点:

from rest_framework.views import APIView

class GetProfileEmployeeView(APIView):
def get(self, request, format=None):
# I associate Django users to a matching Employee record via e-mail address
emp_profile = Employee.objects.get(email=self.request.user.email)
serializer = EmployeeSerializer(emp_profile)
return Response(serializer.data)

然后,在您的 urls.py 中添加一个指向此 View 的端点:

urlpatterns = [
url(r'^profile/?$', utility_views.GetProfileEmployeeView.as_view()),
]

当用户 GET 该端点时,他们将取回他们的整个用户配置文件。您也可以疯狂地手动制作由来自多个模型对象的数据组成的响应:

def get(self, request, format=None):
employee = Employee.objects.get(id=self.request.employee.id)
company = toolbox.get_employee_company(employee)

profile_co = CompanySerializer(company).data
profile_co['licenses'] = AccountSerializer(Account.objects.get(company=company)).data['license_count']

profile = {}
profile['id'] = employee.id
profile['first_name'] = employee.first_name
profile['last_name'] = employee.last_name
profile['email'] = employee.email
profile['is_admin'] = employee.is_admin
profile['company'] = profile_co

return Response(profile)

关于django - (Django)在 Django Rest Framework 中将 auth.User 表与 app.UserProfile 与基于类的 View 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com