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

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

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

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

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

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

【问题讨论】:

  • 添加默认值 = ? and editable = False 字段,并尝试阅读文档

标签: python django readonly autofill


【解决方案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)

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2021-10-19
    • 1970-01-01
    • 2019-04-14
    • 2021-05-25
    • 2021-12-31
    • 2016-12-22
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多