【发布时间】:2017-11-29 13:12:24
【问题描述】:
我正在尝试重构我的 Django 应用程序。这是我发现烦人的重复代码:
class EducationInfoViewSet(viewsets.ModelViewSet):
queryset = pf.education_info.objects.all()
serializer_class = EducationInfoSerializer
permission_classes = (VisionUserPermissions, )
def get_queryset(self):
model = pf.education_info
identity = self.request.query_params.get('username',None)
queryset = model.objects.all()
user = User.objects.none()
if identity is not None:
user = User.objects.get(username=identity)
student = get_object_or_404(dbd.user_type, username=user)
queryset = model.objects.filter(username=student)
if not permission_check(self.request,user):
return User.objects.none()
return queryset
class FamilyInfoViewSet(viewsets.ModelViewSet):
queryset = pf.family_info.objects.all()
serializer_class = FamilyInfoSerializer
permission_classes = (VisionUserPermissions, )
def get_queryset(self):
model = pf.family_info
identity = self.request.query_params.get('username',None)
queryset = model.objects.all()
user = User.objects.none()
if identity is not None:
user = User.objects.get(username=identity)
student = get_object_or_404(dbd.user_type, username=user)
queryset = model.objects.filter(username=student)
if not permission_check(self.request,user):
return User.objects.none()
return queryset
所以我的“get_queryset”函数除了一个变量之外是相同的,而且我有多个像这两个这样的类。我应该如何在不重复自己的情况下实现这一点?
提前致谢!
【问题讨论】:
-
请阅读article关于python中的继承
-
创建一个包含所有常用方法的 InfoViewSet 类。然后创建 Family 和 Education 类,让它们从 InfoViewSet 继承,并且只实现不同的方法。
-
感谢您的文章和整个想法!我没有意识到类继承可以如此灵活。
标签: python django class django-rest-framework multiple-inheritance