Django:具有条件的ModelForm [英] Django : ModelForm with conditions
问题描述
我正在尝试创建一个表单变量。作为默认玩家有0级,他可以改变是名字。后来当他是1级时,他可以改变是名字,就是头像。当他是3级时,他可以改变是名字,就是头像,就是工作。等等...
I'm trying to create a form variable. As default Player have the level 0 and he can just change is name. Later when he is level 1, he can change is name and is avatar. When he is level 3, he can change is name, is avatar and is job. Etc...
Models.py:
class Player(models.Model):
level = models.SmallIntegerField(default=0)
name = models.CharField(max_length=50)
avatar = models.URLField(default='http://default-picture.com/01.png')
job = models.TextField(null=True)
Fomrs.py:
class ProfileForm(forms.ModelForm):
class Meta:
model = Player
fields = ['name', 'avatar', 'job']
widgets = {
'name': forms.TextInput(),
'avatar': forms.TextInput(),
'job': forms.Textarea(),
}
Views.py:
def game(request, id):
user = get_object_or_404(Player, id=id)
if request.method == 'POST':
form = ProfileForm(request.POST, instance=user)
if form.is_valid():
form.save()
return HttpResponse('Success')
else:
form = ProfileForm(instance=user)
return render(request, "page/template.html",
{'form': form})
模板.html:
{{ form }}
可以在将表单的渲染发送到render engime之前添加条件?或者我需要在我的模板中做条件?
It's possible to add condition for the render of the form before send it to the render engime ? Or I need to do it in my Template with conditions ?
我只是在允许实例对象具有或多或少的这些参数之一(在
I just when to allow the instanced object to have more or less positibilies in terms of one of these parameters (in the exemple is the level of the player).
推荐答案
您可以覆盖表单的 __ init __
方法有条件地删除或禁用字段:
You can overwrite the form's __init__
method to remove or disable fields conditionally:
class ProfileForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.level < 3:
self.fields['job'].disabled = True # still displays the field in the template
# del self.fields['job'] # removes field from form and template
if self.instance and self.instance.level < 1:
self.fields['avatar'].disabled = True
这篇关于Django:具有条件的ModelForm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!