1
在我的項目中,我使用的代碼來自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
我知道你是一個新用戶......但在發佈你的第一個問題之前,可能需要查看一下:對於你自己可能會注意到的代碼在問題中被粘貼(和格式化)沒有鏈接。將它與回購鏈接聯繫起來也是無用的:當您解決問題時,回購中的代碼將會改變,未來的訪問者將無法從您的問題中受益。我不是downvoter,但我明白爲什麼有人真的低估了你的問題......: - | – mac
謝謝你的幫助。 –