(Django)将Django Rest框架中的auth.User表与app.UserProfile结合在一起,并使用基于类的视图

(Django)将Django Rest框架中的auth.User表与app.UserProfile结合在一起,并使用基于类的视图,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,我需要通过Django Rest API创建User实例。普通Django内置的用户需要扩展,最常见的是用户配置文件模型。因此,User对象必须用API中的User和UserProfile的单独表格表示 我假设我可以创建一个基于函数的视图,将User和UserProfile序列化程序中的序列化数据组合在一起,但我很想知道是否可以使用基于类的视图执行同样的操作。它需要有两个QuerySet和serializer_类,这可能吗?您可以使用一个简单的APIView来实现这一点: from rest_f

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


我假设我可以创建一个基于函数的视图,将
User
UserProfile
序列化程序中的序列化数据组合在一起,但我很想知道是否可以使用基于类的视图执行同样的操作。它需要有两个QuerySet和serializer_类,这可能吗?

您可以使用一个简单的
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)
然后,在
url.py中添加指向此视图的端点:

urlpatterns = [
    url(r'^profile/?$', utility_views.GetProfileEmployeeView.as_view()),
]
当用户
获取该端点时,他们将返回其整个用户配置文件。您还可以疯狂地手动创建一个由多个模型对象的数据组成的响应:

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)