Django rest框架了解如何查询关系

Django rest框架了解如何查询关系,django,django-rest-framework,Django,Django Rest Framework,[ { “id”:1, “地址”:“海得拉巴”, “雇员”:“本地主机:8000/雇员/1/”, “职务头衔”:“管理员”, “employeesomething”:http://localhost:8000/employee/2/" }, { “id”:2, “地址”:“海得拉巴”, “雇员”:http://localhost:8000/employee/1/", “职务头衔”:“管理员”, “employeesomething”:http://localhost:8000/employee/

[
{
“id”:1,
“地址”:“海得拉巴”,
“雇员”:“本地主机:8000/雇员/1/”,
“职务头衔”:“管理员”,
“employeesomething”:http://localhost:8000/employee/2/"
},
{
“id”:2,
“地址”:“海得拉巴”,
“雇员”:http://localhost:8000/employee/1/",
“职务头衔”:“管理员”,
“employeesomething”:http://localhost:8000/employee/3/"
},
{
“id”:3,
“地址”:“海得拉巴”,
“雇员”:http://localhost:8000/employee/4/",
“职务头衔”:“管理员”,
“employeesomething”:http://localhost:8000/employee/5/"
},
{
“id”:4,
“地址”:“海得拉巴”,
“雇员”:http://localhost:8000/employee/4/",
“职务头衔”:“管理员”,
“employeesomething”:http://localhost:8000/employee/6/"
}
]
在您的视图中:

假设您在
请求中获得
员工id
。数据

models.py

class Employee(models.Model):
    Name = models.CharField(max_length=50 )
    Email = models.CharField(max_length=30)

    def __str__(self):
        return self.Name              # __unicode__ on Python 2



class EmployeeProfile(models.Model):
    employee = models.ForeignKey(Employee, related_name='fromemployee')
    Address = models.CharField(max_length=50, null=True, blank=True)
    job_title = models.CharField(max_length=50, null=True, blank=True)
    employeesomething= models.ForeignKey(Employee, related_name='refirence')

    def __str__(self):              # __unicode__ on Python 2
       return self.Address



serializers.py

class EmployeeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Employee
        fields = ('id', 'Name')


class EmployeeProfileSerializer(serializers.HyperlinkedModelSerializer):
    # usergroups = serializers.StringRelatedField(many=True)
    employee_set = EmployeeSerializer(many=True, read_only=True)
    class Meta:
        model = EmployeeProfile
        fields = ('id', 'Address','employee','job_title','employeesomething','employee_set')


views.py

class EmployeeViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer    

class EmployeeProfileViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = EmployeeProfile.objects.all()
    serializer_class = EmployeeProfileSerializer        


urls.py

router = routers.DefaultRouter()


router.register(r'employee', views.EmployeeViewSet)
router.register(r'employeeprofile', views.EmployeeProfileViewSet)


urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]


my out put   http://localhost:8000/employeeprofile/

如果您希望使用
EmployeeProfile
而不是其链接,请使用
ModelSerializer
,而不是
HyperlinkedModelSerializer
,谢谢您的建议。当我传递员工id时,我想写一个过滤器。我需要一个与员工关联的员工档案,在我的案例中,员工1在员工档案1,2中。您还需要了解什么?您需要在视图中使用此代码,您如何将“员工id”发送到视图?我是Rest Framework的新手确定您是否可以更明确一些。我得到一个名称“request”未定义错误。谢谢您您发送的是GET或POST方法?我使用的是GETmethod@thisisms我编辑了答案。我希望这能给你一个更好的主意。
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.serializers import EmployeeProfileSerializer
from myapp.models import EmployeeProfile


class MyView(APIView):

    def get(self, request, *arga, **kwargs)
        e_profiles = EmployeeProfile.objects.filter(employee__pk=request.GET.get('employee_id'))

        # Then call you serializer

        e_serialized = EmployeeProfileSerializer(e_profiles, many=True)
        return Response(e_serialized.data)