我正在尝试使用django表单初始化功能,并且出于某种原因,网络似乎非常简洁的高级表单功能。我只是想像#34; repo-with-accidental-space"并使它成为意外空间"回复意外空间"。现在我有:
class BitbucketCreateRepoForm(forms.Form):
def __init__(self, repo_name=None, *args, **kwargs):
if repo_name:
self.repo_name = repo_name.strip()
super(BitbucketCreateRepoForm, self).__init__()
username = forms.ChoiceField(required=True, initial='codyc54321', choices=BITBUCKET_USERNAME_CHOICES)
repo_name = forms.CharField(required=True, label='Repo name')
description = forms.CharField(widget=forms.Textarea, required=False)
表单将在页面上加载,但是当我提交时:
AttributeError at /bitbucket/create-repo
'QueryDict' object has no attribute 'strip'
进入ipdb变得毛茸茸,必须有一个标准的方法来做到这一点,但我不能在我看到它完成的地方工作。
这是观点:
def create_repo(request):
form = BitbucketCreateRepoForm(request.POST or None)
if form.is_valid():
repo_name = request.POST['repo_name']
username = request.POST['username']
description = request.POST['description'] or None
create_repo_func(username=username, repo_name=repo_name, description=description)
return render(request, 'bitbucket/create_repo.html', locals())
如果表单经过POST后如何处理此字段,并更新该字段,在GET请求中将其留空?谢谢
答案 0 :(得分:1)
在实例化此表单时传入请求方法。您可以使用以下方法检查请求方法:
post = request.method == 'POST'
您可以将其传递到下面的修改后的__init__
。
class BitbucketCreateRepoForm(forms.Form):
def __init__(self, repo_name=None, post=False, *args, **kwargs):
if repo_name and post:
self.repo_name = json.dumps(repo_name).strip()
super(BitbucketCreateRepoForm, self).__init__()
username = forms.ChoiceField(required=True, initial='codyc54321', choices=BITBUCKET_USERNAME_CHOICES)
repo_name = forms.CharField(required=True, label='Repo name')
description = forms.CharField(widget=forms.Textarea, required=False)
更新:
我在你修改你的问题时打字。为了获得QueryDict对象的字符串表示,只需import json
然后json.dumps(repo_name)
。希望有所帮助。