我有一个Row
类和一个SpottedPub
模型。它们几乎相同,只是Row
有一些额外的字段。
我需要做的是从spottedpub
对象属性优雅地更新row
字段。我试过这个
spotted_pubs = SpottedPub.objects.filter(notification__rule__suite__campaign=self,
name=particular_row.name)
if spotted_pubs.all():
spotted_pubs.update(**row.__dict__)
但是我收到一条错误消息,说我将过多的kwargs传递给update()
:
FieldDoesNotExist: SpottedPub has no field named 'profit_weight'
有没有办法放弃那些与字段不对应的kwargs?
我尝试编写自定义管理器
class CustomSpottedPubManager(models.Manager):
def update_drop_fields(self, **fields):
queryset = super(CustomSpottedPubManager, self).get_queryset()
print(queryset)
# drop unwanted fields here
queryset.update(**fields)
并将其附加到模型
class SpottedPub(BaseUserObject):
objects = CustomSpottedPubManager()
但update_drop_fields()
方法没有被调用,因为我在过滤后已经访问了此方法:
filter(notification__rule__suite__campaign=self,
name=particular_row.name)
答案 0 :(得分:0)
您创建update_drop_fields
并过滤字段的想法看起来不错。
您可以使用自定义update_drop_fields()
方法
class CustomSpottedPubQueryset(models.QuerySet):
def update_drop_fields(self, **fields):
return self.update(**fields)
然后create a manager with the queryset methods。
class SpottedPub(BaseUserObject):
objects = CustomSpottedPubQueryset.as_manager()