1

フォームを .is_valid() で検証できないようです

関連するビュー

def edit_social_media(request, user_id):

#verify a user is allowed to access the page

# user is saving the form
if request.POST:

form = SocialMediaForm(request.POST)
if form.is_valid():
 ...

  return HttpResponseRedirect(reverse(users.profile,
                                   args = (request.user.id,)))

# displaying the initial form
else:
   try:
     form = SocialMediaForm(instance = SocialMedia.objects.get(user = request.user))
   except SocialMedia.DoesNotExist:
     form = SocialMediaForm()


return render_to_response('users/edit_social_media.html', {'form': form, 'user' : user},
 context_instance = RequestContext(request))

Forms.py

class SocialMediaForm(forms.ModelForm):
   class Meta:
      model = SocialMedia
      fields = {'twitter', 'facebook', 'linkedin'}

テンプレート

<form method="post" action=''>
{% csrf_token %}
<div class="form-col-left">
    <p>
    {{ form.as_p }}
</p>
</div>


<div class="submitbutton">
<input type="submit" class="green button" value="Save Social Media Settings" />
</div>

</form>

モデル

from django.db import models
from django.contrib.auth.models import User

class SocialMedia(models.Model):
    class Meta:
        app_label = 'dashboard'

  #the user associated with the data
  user = models.ForeignKey(User)

  #Twitter, Facebook, and Linkedin pages
  twitter = models.URLField("Twitter")
  facebook = models.URLField("Facebook")
  linkedin = models.URLField("Linkedin")

いくつかの助けをいただければ幸いです。私はdjangoにかなり慣れていないので、細かいニュアンスのいくつかを見逃しています。バインドされたフォームとバインドされていないフォームに関連するスタックオーバーフローで同様の問題をいくつか見つけましたが、ドキュメントを読んで、データをフォームに適切にバインドしたと思います。

4

1 に答える 1

1

これは ModelForm であるため、このフォームが使用している実際のモデルである SocialMedia クラスを確認するのに役立ちます。また、検証しないという意味がわかりませんが、 is_valid() メソッドが False を返すと想定しています。

私の推測では、フォームにユーザーを設定していないため、メソッドは False を返します。POST ディクショナリには、user または user_id がありません。「if form.is_valid()」ステートメントの前に次の行を追加します。

form.instance.user = self.request.user

これがうまくいくことを願っています。

于 2013-07-08T22:49:04.940 に答える