我应该如何自动填充字段并在 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)
我是 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)