【问题标题】:(Django) Combining auth.User tables with app.UserProfile in Django Rest Framework with Class Based Views(Django) 在 Django Rest Framework 中将 auth.User 表与 app.UserProfile 与基于类的视图相结合
【发布时间】:2016-03-23 19:17:32
【问题描述】:

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

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

【问题讨论】:

    标签: django rest django-rest-framework


    【解决方案1】:

    您可以使用简单的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 中添加一个指向该视图的端点:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-26
      • 2016-09-11
      • 1970-01-01
      • 2019-07-01
      • 2021-01-24
      • 2013-09-29
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多