我应该如何自动填充一个字段并在 django 中使其只读?

Posted

技术标签:

【中文标题】我应该如何自动填充一个字段并在 django 中使其只读?【英文标题】:How should i auto fill a field and make it readonly in django? 【发布时间】:2020-06-30 18:10:47 【问题描述】:

我是 django 的新手,我正在测试我的知识。

在这里和网上发现了很多重复,但没有任何用处

我正在尝试创建一个 ForeignKey 字段,该字段由于用户填写的其他字段而被填充,并使其对用户不可更改。

我认为我应该使用覆盖 save() 方法,但根本想不通。

我应该如何进行自动填充和只读操作?

【问题讨论】:

添加默认值 = ? and editable = False 字段,并尝试阅读文档 【参考方案1】:

你的方法是对的。覆盖 save 方法,如果 self.pk 不是 None 如果您的字段已更改,则会引发异常。您可以使用 django 模型工具轻松跟踪模型中的更改:https://django-model-utils.readthedocs.io/en/latest/utilities.html#field-tracker

原理:

class MyModel(models.Model):
    #....
    some_field = models.Foreignkey(...)
    tracker = FieldTracker()

    def save(*args, **kwargs):
        if self.pk is None:
            # new object is being created
            self.some_field = SomeForeignKeyObject
        else:
            if self.tracker.has_changed("some_field"):
                raise Exception("Change is not allowed")
        super().save(*args, **kwargs)

【讨论】:

以上是关于我应该如何自动填充一个字段并在 django 中使其只读?的主要内容,如果未能解决你的问题,请参考以下文章

如何在移动视图中使填充响应?

如何在 GridView 中使 Access 主键可编辑

Django提取值并在另一个页面中使它们成为占位符

Django:保存模型时填充用户 ID

如何在 django 中使 @cached_property 无效

在 Django 中自动填充一组通用的多对多字段?