为什么使用 filter() 给出了我想要的,但是使用 get() 会引发错误
Why using filter() gives what I want, but with get() raises an error
我创建了自定义查询集和管理器来序列化我的数据。
class UpdateQuerySet(models.QuerySet):
def serialize(self):
return serialize("json", self)
class UpdateManager(models.Manager):
def get_queryset(self):
return UpdateQuerySet(self.model, using=self._db)
class Update(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
objects = UpdateManager()
然后,当我尝试获取这些数据时,它使用了这个:
json_data = Update.objects.filter(id=1).serialize()
但引发 AttributeError('Update' 对象没有属性 'serialize'):
json_data = Update.objects.get(id=1).serialize()
您还想将 serialize
添加到 UpdateManager
class UpdateManager(models.Manager):
def get_queryset(self):
return UpdateQuerySet(self.model, using=self._db)
def serialize(self):
return self.get_queryset().serialize()
您的 Update.objects.filter(id=1)
return 是 UpdateQueryset
,而 QuerySet
提供了 .serialize(…)
方法。 .get(id=1)
函数将 return 一个 Update
模型 对象 ,所以不是 QuerySet
,默认情况下模型会 [=31] =]不提供.serialize(…)
方法。
但是您可以自己实现它,甚至可以将 QuerySet
概括为适用于各种模型,例如:
class SerializableQuerySet(models.QuerySet):
def serialize(self):
return serialize('json', self)
class SerializableManager(models.Manager):
<b>_queryset_class = SerializableQuerySet</b>
def serialize(self, *args, **kwargs):
return self.get_queryset().serialize(*args, **kwargs)
class SerializableModel(models.Model):
objects = SerializableManager()
def <b>serialize</b>(self):
return serialize('json', <b>[self]</b>)
class Meta:
<b>abstract = True</b>
class Update(<b>SerializableModel</b>):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
所以现在所有继承自 SerializableModel
的模型,例如 Update
现在都将使用 SerializableManager
,并且还将继承 .serialize()
方法,这样例如,您也可以使用 Update.objects.get(pk=1).serialize()
。
我创建了自定义查询集和管理器来序列化我的数据。
class UpdateQuerySet(models.QuerySet):
def serialize(self):
return serialize("json", self)
class UpdateManager(models.Manager):
def get_queryset(self):
return UpdateQuerySet(self.model, using=self._db)
class Update(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
objects = UpdateManager()
然后,当我尝试获取这些数据时,它使用了这个:
json_data = Update.objects.filter(id=1).serialize()
但引发 AttributeError('Update' 对象没有属性 'serialize'):
json_data = Update.objects.get(id=1).serialize()
您还想将 serialize
添加到 UpdateManager
class UpdateManager(models.Manager):
def get_queryset(self):
return UpdateQuerySet(self.model, using=self._db)
def serialize(self):
return self.get_queryset().serialize()
您的 Update.objects.filter(id=1)
return 是 UpdateQueryset
,而 QuerySet
提供了 .serialize(…)
方法。 .get(id=1)
函数将 return 一个 Update
模型 对象 ,所以不是 QuerySet
,默认情况下模型会 [=31] =]不提供.serialize(…)
方法。
但是您可以自己实现它,甚至可以将 QuerySet
概括为适用于各种模型,例如:
class SerializableQuerySet(models.QuerySet):
def serialize(self):
return serialize('json', self)
class SerializableManager(models.Manager):
<b>_queryset_class = SerializableQuerySet</b>
def serialize(self, *args, **kwargs):
return self.get_queryset().serialize(*args, **kwargs)
class SerializableModel(models.Model):
objects = SerializableManager()
def <b>serialize</b>(self):
return serialize('json', <b>[self]</b>)
class Meta:
<b>abstract = True</b>
class Update(<b>SerializableModel</b>):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
所以现在所有继承自 SerializableModel
的模型,例如 Update
现在都将使用 SerializableManager
,并且还将继承 .serialize()
方法,这样例如,您也可以使用 Update.objects.get(pk=1).serialize()
。