首页 > 解决方案 > Django将默认值添加到具有另一个字段值的模型字段

问题描述

我想向我的 django 模型添加一个字段,并且我希望它的默认值等于主键值(id),但我希望它适用于我的数据库中所有已经存在的记录。

class ModelB(models.Model):
  id= models.IntegerField()
  index = models.IntegerField(default=" i want something here to get id value")

我发现以前的问题涵盖了这一点,但答案只提供了一个解决方案,您必须添加一种方法来增加保存时的价值。在我的情况下,我希望这个值也适用于以前保存的记录。

如果你有想法,我会很感激你的帮助,谢谢。

标签: djangodjango-models

解决方案


您应该通过覆盖保存方法来执行此步骤。您还可以创建一个更新所有过去模型的函数。

模型.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)

现在,只需前往管理站点,选择所有要刷新的模型,然后运行此操作。(可以在下拉菜单中找到)


推荐阅读