我正在阅读如何为模型编写自定义管理器,但是似乎我有几个问题。我想在类中添加自定义管理器的原因是,我想引入一个称为“ customUpdate”的方法,该方法将基本上检查dict中的成员是否是该类的成员。到目前为止,这就是我的代码。然后,我会在一些我遇到的问题中贴出
class modelEmployer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
location = models.PointField(srid=4326,max_length=40, blank=True, null=True)
objects = GeoManager() # models.GeoManager()
现在这是我的经理班级想要的一个粗略草图:
class customEmployerManager(models.Manager):
def customUpdate(dataDict):
# Check if the fields in this data are present in this model
for key in dataDict:
empInst = How do I get instance of class which filter returned ?
if not hasattr(empInst, key):
# This property is not present
dataDict.pop(key)
empInst.update(**dataDict) #Will this work ? Update only works with queryset
现在这是我的问题
1-从我阅读的教程中,我需要将customEmployerManager
作为objects = customEmployerManager()
这样的对象成员添加到我的主模型类中,但是我目前正在使用geodjango,在那里我已经有了一些东西如何添加另一个customEmployerManager
在那儿?
2-我希望在执行此类操作时调用我的更新方法
modelEmployer.objects.filter(....).customUpdate(xx)
在customUpdate中,如何访问查询集,以便可以在其上调用.update(**dataDict)
?我目前正在做empInst.update(**dataDict)
,这行不通吗?另外,如何获取正在调用更新的modelEmployer实例的实例?
答案 0 :(得分:0)
您可以像这样覆盖GeoManager:
class customEmployerManager(GeoManager):
def customUpdate(self, **dataDict):
# Check if the fields in this data are present in this model
empInst = self.get_queryset()
for i in empInst:
i.update(**dataDict)
# in models.py
class modelEmployer(models.Model):
objects = customEmployerManager()
...
def update(self, **kwargs):
for key, value in kwargs.items():
if hasattr(self, key):
setattr(self, key, value)
self.save()
您需要像这样致电经理:
modelEmployer.objects.customUpdate(**dict)