如何解决为什么使用filter给出我想要的,但是使用get会引发错误
我创建了cusom QuerySet和Manager来序列化我的数据。
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)
返回一个UpdateQueryset
,并且该QuerySet
提供了一种.serialize(…)
方法。 .get(id=1)
函数将返回Update
模型 object ,而不是QuerySet
,并且默认情况下,模型 not 不提供.serialize(…)
方法。
不过,您可以自己实现,甚至可以推广QuerySet
以使用各种模型,例如:
class SerializableQuerySet(models.QuerySet):
def serialize(self):
return serialize('json',self)
class SerializableManager(models.Manager):
_queryset_class = SerializableQuerySet
def serialize(self,*args,**kwargs):
return self.get_queryset().serialize(*args,**kwargs)
class SerializableModel(models.Model):
objects = SerializableManager()
def serialize(self):
return serialize('json',[self])
class Meta:
abstract = True
class Update(SerializableModel):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
因此,现在所有从SerializableModel
继承的模型,例如Update
,现在都将使用SerializableManager
,并且还将继承.serialize()
方法,这样您就可以也可以与Update.objects.get(pk=1).serialize()
一起使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。