【发布时间】:2022-06-24 17:49:09
【问题描述】:
我已经创建了代理类,主要是为了实现自定义过滤,但也有一些其他相当小的自定义方法,它们将被扩展以提供其他自定义逻辑。
假设我有模型:
class Videos(models.Model):
title = models.CharField(max_length=200)
publisher = models.Charfield(max_length=100)
release_date = models.DateField()
class Superheroes(Videos):
objects = SuperheroesManager()
class Meta:
proxy = True
class Recent(Videos):
objects = RecentManager()
class Meta:
proxy = True
和模型经理:
class SuperheroesManager():
def get_queryset(self):
return super().get_queryset().filter(publisher__in=['Marvel','DC'])
class RecentManager():
def get_queryset(self):
return super().get_queryset().filter(release_date__gte='2020-01-01')
在前端,用户可以选择对应于其中一个代理类的类别。维护传递给视图的类别与关联的代理类之间的映射的最佳方法是什么?
目前我有一个隐式依赖,即前端提供的类别名称必须与代理类名称相同,从而允许视图中的标准接口:
def index(request, report_picked)
category = getattr(sys.modules[__name__], report_picked)
videos = category.objects.all()
我想摆脱这种隐式依赖,但不确定最好的方法是什么。
我不想维护字典,也不能使用工厂方法,因为它应该返回完全初始化的对象,而我只需要返回类。
实现这一点的最佳方法是什么?
【问题讨论】: