我正在尝试创建一种方法来更新具有CharField和ForeignKey字段的数据库项。我想传递原始值,这样就不必每次都为每个字段手动输入它们,但这给了我一个“选择一个有效的选择。这个选择不是可用的选择之一。” 对该group领域的警告。如何删除此警告消息?
手动将错误消息(在ModelForm中)设置为其他内容仍会显示空(无序)列表项。设置表单UpdateUserView以form = UserForm()消除错误,但不将默认值传递给表单。
models.py
class User(models.Model):
username = models.CharField(max_length=50)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
class Group(models.Model):
name = models.CharField(max_length=20)
description = models.CharField(max_length=200)
forms.py
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'group']
views.py
class UpdateUserView(TemplateView):
template_name = 'update_user.html'
def get(self, request):
user_id = int(request.GET.get('user_id'))
user = User.objects.get(id=user_id)
default_name = getattr(user, 'username')
default_group = getattr(user, 'group')
form = UserForm({'username': default_name, 'group': default_group})
return render(request, self.template_name, {'form': form, 'user': user})
你必须使用这样的initial参数:
class UpdateUserView(TemplateView):
template_name = 'update_user.html'
def get(self, request):
user_id = int(request.GET.get('user_id'))
user = User.objects.get(id=user_id)
form = UserForm(initial={'username': user.username, 'group': user.group.id})
return render(request, self.template_name, {'form': form, 'user': user})
看看我在group: user.group.id这里使用,因为你在表单中引用的模型字段是一个ForeignKey
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。