在我的项目中,我正在使用来自http://djangosnippets.org/snippets/562/的代码,而我遇到了一些问题。
当我使用自己的ChainableQuerySetManager并尝试通过相关对象创建对象时,我收到了一个递归错误。
ChainableQuerySetManager来源:
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()
感谢您的帮助。 完整来源可以在https://github.com/RANUX/django-simptools
找到答案 0 :(得分:0)
我最近有类似的问题。尝试在查询管理器中将self.__class__
替换为ChainableQuerySetManager
。我从来没有完全理清为什么这是问题,但它确实为我解决了问题。