Python 创建自定义可链接查询集管理器时出现问题
在我的项目中,我使用的代码来自,我遇到了一些问题 当我使用自己的ChaineableQuerySetManager并试图通过相关对象创建对象时,我会得到一个递归错误 ChainableQuerySetManager源:Python 创建自定义可链接查询集管理器时出现问题,python,django,Python,Django,在我的项目中,我使用的代码来自,我遇到了一些问题 当我使用自己的ChaineableQuerySetManager并试图通过相关对象创建对象时,我会得到一个递归错误 ChainableQuerySetManager源: class ChainableQuerySetManager(models.Manager): def __init__(self, qs_class=models.query.QuerySet): super(ChainableQ
class ChainableQuerySetManager(models.Manager):
def __init__(self, qs_class=models.query.QuerySet):
super(ChainableQuerySetManager,self).__init__()
self.queryset_class = qs_class
def get_query_set(self):
return self.queryset_class(self.model)
def __getattr__(self, attr, *args):
try:
return getattr(self.__class__, attr, *args)
except AttributeError:
return getattr(self.get_query_set(), attr, *args)
扩展查询集:
class ExtendedQuerySet(models.query.QuerySet):
def get_or_None(self, *args, **kwargs):
result = None
try:
result = self.get(*args, **kwargs)
except ObjectDoesNotExist:
pass
return result
和测试模型:
class ParentObject(models.Model):
value = models.IntegerField(default=0)
def count_someobjects(self):
return self.someobjects.count()
def create_someobject_throw_related(self):
return self.someobjects.create()
def create_someobject(self):
return SomeObject.objects.create(parent=self)
class SomeObject(models.Model):
parent = models.ForeignKey(ParentObject, related_name='someobjects')
value = models.IntegerField(default=1)
objects = ChainableQuerySetManager(ExtendedQuerySet)
测试用例如下所示:
class ExtendedQuerySetTests(TestCase):
def setUp(self):
self.parent = ParentObject.objects.create()
def test_create_someobject_in_parent(self):
someobject = self.parent.create_someobject_throw_related()
谢谢你的帮助。
完整的来源可以在上找到,我最近也有类似的问题。在查询管理器中,尝试将self.\uu class\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu替换为chaineableQuerySetManager。我从来没有弄清楚这到底是为什么,但它确实为我解决了问题。我知道你是一个新用户。。。然而,在发布第一个问题之前,可能值得一看:对于其中一个问题,您可能会自己注意到,代码是在问题中粘贴和格式化的,而不是链接的。将其链接到回购协议也是绝对无用的:当你解决了问题时,回购协议中的代码将发生变化,未来的访问者将无法从你的问题中获益。我不是投反对票的人,但我明白为什么有人真的投了你的问题的反对票…:-|