2016-03-23 8 views
1

Django Rest API'sı aracılığıyla User örneğini oluşturmam gerekiyor. User dahili normal Django, en yaygın olarak bir UserProfile modeliyle genişletilmelidir. Bu nedenle, User nesnelerinin, API'da User ve UserProfile için ayrı bir tabloyla temsil edilmesi gerekiyordu.(Django) Django Rest Framework'de sınıf tabanlı görünümlerle app.UserProfile ile auth.User tablolarını birleştirin

ben hem User ve UserProfile serileştiricileri gelen seri hale getirilmiş verileri birleştiren tek bir işlev tabanlı bir görünümünü yapabilir varsayalım, ama sınıf tabanlı görünümü ile aynı şeyi yapmak mümkün olup olmadığını bilmek gerçekten ilgileniyorum. İki querysets ve serializer_classes olması gerekir, bu bile mümkün mü?

cevap

1

Sen bunu başarmak için basit APIView kullanabilirsiniz: Bu görüşe işaret eden bir bitiş noktası eklemek senin urls.py yılında, Sonra

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) 

:

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

kullanıcılar GET son noktaya o zaman onlar olacak tüm kullanıcı profilini geri al. Ayrıca, birden çok model nesnesinden gelen verilerden oluşan bir yanıtı çıldırıp el ile oluşturabilirsin:

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) 
+0

Yardımlarınız için teşekkürler! – tear728