Я читаю, как написать собственный менеджер для моей модели, но, похоже, у меня есть несколько вопросов. Причина, по которой я хотел бы добавить собственный менеджер в свой класс, заключается в том, что я хотел бы ввести метод с именем «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, для которого вызывается обновление?