gpt4 book ai didi

Django : ModelForm with conditions

转载 作者:行者123 更新时间:2023-12-04 19:31:07 27 4
gpt4 key购买 nike

我正在尝试创建一个表单变量。默认播放器的级别为 0,他可以更改名称。以后到了1级,就可以改名字和头像了。当他3级时,他可以改变名字、头像和工作。等等...

模型.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)

Formrs.py:
class ProfileForm(forms.ModelForm):

class Meta:
model = Player
fields = ['name', 'avatar', 'job']
widgets = {
'name': forms.TextInput(),
'avatar': forms.TextInput(),
'job': forms.Textarea(),
}

View .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 }}

在将表单发送到渲染引擎之前,可以为表单的渲染添加条件吗?或者我需要在我的模板中使用条件来完成?

我只是何时允许实例化对象在这些参数之一方面具有更多或更少的可能性(在示例中是玩家的级​​别)。

最佳答案

您可以覆盖表单的 __init__有条件地删除或禁用字段的方法:

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 with conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43001425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com