django - Django将默认值添加到具有另一个字段值的模型字段
问题描述
我想向我的 django 模型添加一个字段,并且我希望它的默认值等于主键值(id),但我希望它适用于我的数据库中所有已经存在的记录。
class ModelB(models.Model):
id= models.IntegerField()
index = models.IntegerField(default=" i want something here to get id value")
我发现以前的问题涵盖了这一点,但答案只提供了一个解决方案,您必须添加一种方法来增加保存时的价值。在我的情况下,我希望这个值也适用于以前保存的记录。
如果你有想法,我会很感激你的帮助,谢谢。
解决方案
您应该通过覆盖保存方法来执行此步骤。您还可以创建一个更新所有过去模型的函数。
模型.py
class ModelB(models.Model):
id = models.IntegerField()
index = models.IntegerField(null=True)
def save(self, *args, **kwargs):
if not self.index:
self.index = self.id
super().save(*args, **kwargs)
要创建“刷新”功能,请尝试以下操作:
管理员.py
...
from .models import ModelB
def refresh_objects(modeladmin, request, queryset):
for object in queryset:
object.save()
refresh_objects.short_description = "Update selected objects."
class ModelBAdmin(admin.ModelAdmin):
actions = [refresh_objects]
admin.site.register(ModelB, ModelBAdmin)
现在,只需前往管理站点,选择所有要刷新的模型,然后运行此操作。(可以在下拉菜单中找到)
推荐阅读
- php - elasticsearch php不返回没有空格的搜索结果
- node.js - 节点无法启动反应 index.js 退出 1
- laravel - 在十月 CMS 中将自定义小部件添加到表单时出错
- java - 关于AnyLogic中参数或变量类型的问题
- python - 将 docker 镜像发送到 Docker hub 并使用 python 将其标记为最新
- javascript - 当我将对象作为道具传递给子组件时如何避免重新渲染?
- android - Quasar Cordova Build“无法初始化类 com.android.build.gradle.internal.VariantManager”
- python-3.x - 语法错误:导入 requests_html 时
- javascript - AngularJS、NodeJS:将数据保存到 Json 文件或数据库
- r - 划分数据框并再次合并后顺序是否保持不变?