Django的委托是一个Django应用获取自动链式MANAGER / queryset的委托方法。
通常情况下,通过定义经理的方法,Django的让你这样做:
>>> SomeModel.objects.custom_query()
...但它不会让你这样做:
>>> SomeModel.objects.custom_query()。another_custom_query()
......除非你重复你的方法和定义一个多余的queryset子......直到现在。
随着DelegateManager和@代表,您可以编写维护自定义查询逻辑提供免费链接。而不是定义经理的方法,您定义的QuerySet方法,装点那些你想委派,两行DelegateManager子类指定的queryset。 ET VIOLA。像这样:
从委托进口DelegateManager,委托
类CustomQuerySet(models.query.QuerySet):
  @代表
 高清qs_method(个体经营,some_value):
 回报self.filter(some_param__icontains = some_value)
 高清dont_delegate_me(个体经营):
 回报self.filter(some_other_param =“别的东西”)
类CustomManager(DelegateManager):
  __ queryset__ = CustomQuerySet
类SomeModel(models.Model):
 对象= CustomManager()
#这将工作:
SomeModel.objects.qs_method('哟狗狗“)
#这也将工作:
SomeModel.objects.qs_method('哟狗狗')。qs_method(“我听说你喜欢的queryset法团”)
要自动委托所有在一个QuerySet的方法,你可以创建DelegateQuerySet的子类。这两个的QuerySet子类相同的工作:
从委托进口DelegateQuerySet,委托
类ManualDelegator(models.query.QuerySet):
  @代表
 高清qs_method(个体经营):
 #...
类AutomaticDelegator(DelegateQuerySet):
 高清qs_method(个体经营):
 #...
您也可以直接申请的装饰@代表一类 - 这允许您委托类中的所有方法,而不破坏其继承链。这个例子的工作原理相同的前两个:
从委托代理进口
@代表
类CustomQuerySet(models.query.QuerySet):
 高清qs_method(个体经营,some_value):
 回报self.filter(some_param__icontains=some_value)
Requirements:
- Python
- 在Django的
评论没有发现