在Django表单中,如何将字段设置为只读(或禁用)?
当表单用于创建新条目时,应启用所有字段 - 但是当记录处于更新模式时,某些字段必须是只读的.
例如,在创建新Item模型时,所有字段都必须是可编辑的,但在更新记录时,有没有办法禁用该sku字段以使其可见,但无法编辑?
class Item(models.Model):
sku = models.CharField(max_length=50)
description = models.CharField(max_length=200)
added_by = models.ForeignKey(User)
class ItemForm(ModelForm):
class Meta:
model = Item
exclude = ('added_by')
def new_item_view(request):
if request.method == 'POST':
form = ItemForm(request.POST)
# Validate and save
else:
form = ItemForm()
# Render the view
Run Code Online (Sandbox Code Playgroud)
班级ItemForm可以重复使用吗?ItemForm或者Item模型类需要进行哪些更改?我是否需要编写另一个类" ItemUpdateForm"来更新项目?
def update_item_view(request):
if request.method == 'POST':
form = ItemUpdateForm(request.POST)
# Validate and save
else:
form = ItemUpdateForm()
Run Code Online (Sandbox Code Playgroud) 我有这样的模型:
class MyModel(models.Model):
REGULAR = 1
PREMIUM = 2
STATUS_CHOICES = ((REGULAR, "regular"), (PREMIUM, "premium"))
name = models.CharField(max_length=30)
status = models.IntegerField(choices = STATUS_CHOICES, default = REGULAR)
class MyForm(forms.ModelForm):
class Meta:
model = models.MyModel
Run Code Online (Sandbox Code Playgroud)
在视图中,我初始化一个字段并尝试使其不可编辑:
myform = MyForm(initial = {'status': requested_status})
myform.fields['status'].editable = False
Run Code Online (Sandbox Code Playgroud)
但是用户仍然可以更改该字段.
什么是实现我追求的真正方式?