更新Django模型字段时的最佳实践?这就是经理课程的目的吗?
我对Django非常陌生,我想知道更新字段的最佳实践是什么。这是我的模型:更新Django模型字段时的最佳实践?这就是经理课程的目的吗?,django,python-3.x,django-models,django-managers,Django,Python 3.x,Django Models,Django Managers,我对Django非常陌生,我想知道更新字段的最佳实践是什么。这是我的模型: class Website(models.Model): id = models.AutoField(primary_key=True) url = models.TextField() is_awesome = models.BooleanField(default=False) 现在,我有一个单独的助手文件websiteheloper.py,其中有许多与数据库无关的其他函数,还有这个函数用于更新数据库中
class Website(models.Model):
id = models.AutoField(primary_key=True)
url = models.TextField()
is_awesome = models.BooleanField(default=False)
现在,我有一个单独的助手文件websiteheloper.py,其中有许多与数据库无关的其他函数,还有这个函数用于更新数据库中的特定字段:
def __mark_needs_redone(Website):
Website.update(is_awesome=True)
是否有一个更干净的地方供此类活动居住,例如:
class WebsiteManager(models.Manager)
#Execute function here
这就是管理者应该被使用的方式吗?如果不是,这里的最佳做法是什么?如果该字段位于表单正在处理的模型上,则可以覆盖访问实际实例的save()方法
class Website(models.Model):
id = models.AutoField(primary_key=True)
url = models.TextField()
is_awesome = models.BooleanField(default=False)
def save(self, commit=True):
self.instance.is_awesome = True
return super().save(commit)
不要忘记之后的super().save(commit)调用,因为父级负责保存逻辑您的update()
调用错误,您应该将其调用到模型查询集,而不是实例
class Website(models.Model):
id = models.AutoField(primary_key=True)
url = models.TextField()
is_awesome = models.BooleanField(default=False)
def save(self, commit=True):
self.instance.is_awesome = True
return super().save(commit)
如果每次save()
都需要调用方法,请检查pre_save信号
,如果不需要,请使用管理器
class WebsiteManager(models.Manager):
def mark_needs_redone(self, pk):
self.get(pk=pk).update(is_awesome = True)
将管理器添加到您的模型网站:
class Website(models.Model):
id = models.AutoField(primary_key=True)
url = models.TextField()
is_awesome = models.BooleanField(default=False)
objects = WebsiteManager()
用法是:
Website.objects.mark_needs_redone(pk=1)
对于
pk=1
的网站,该代码将标记为True,该代码甚至无效-update
是查询集方法,而不是实例方法。你是想一次更新每个网站,还是只更新一个?