我应该如何自动填充一个字段并在 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 中使其只读?的主要内容,如果未能解决你的问题,请参考以下文章