我应该如何自动填充字段并在 Django 中将其设置为只读?

How should i auto fill a field and make it readonly in django?

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

在此处和网络上发现了很多重复项,但没有任何用处

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

我认为我应该使用覆盖 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)