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)