2017-02-24 22 views
0

私は同じ問題を抱えていない日にグーグルのドキュメントを読んでいます。 "Views.py"の "member_edit"メソッドはデータを返さないため、フォームを表示できません。Python - 更新(編集)フォームが表示されない

うまくいけば、あなたの何人かが私がどこに間違っていたかを知ることができます。私が得ることができるすべての助けを感謝しなさい!

Models.py

class Member(models.Model): 
    member_no = models.AutoField(primary_key=True) 
    first_name = models.CharField(max_length=50, null=True, blank=True) 
    last_name = models.CharField(max_length=50, null=True, blank=True) 
    email = models.CharField(max_length=50, null=True, blank=True) 
    reg_date = models.DateTimeField(null=True, blank=True) 

    class Meta: 
     db_table = 'Member' 

Forms.py

class RegForm(forms.ModelForm): 
    first_name = forms.CharField(
     widget=forms.TextInput(attrs={'class': 'form-control'}), 
     max_length=30, 
     required=True) 
    last_name = forms.CharField(
     widget=forms.TextInput(attrs={'class': 'form-control'}), 
     max_length=30, 
     required=True) 
    email = forms.CharField(
     widget=forms.EmailInput(attrs={'class': 'form-control'}), 
     required=True, 
     max_length=75) 
    reg_date = forms.DateField(widget=DateWidget(usel10n=True,bootstrap_version=3)) 

    class Meta: 
     model = Member 
     exclude = ['last_login', 'date_joined'] 
     fields = ['first_name', 'last_name', 'email', 'reg_date', ] 

Views.py

def member_edit(request, member_no): 
    member = Member.objects.get(member_no=member_no) 
    if request.method == 'POST': 
     form = RegForm(request.POST or None, instance=member) 
     if form.is_valid(): 
     member.first_name = form.request.POST['first_name'] 
     member.last_name = form.request.POST['last_name'] 
     member.email = form.request.POST['email'] 
     member.reg_date = form.request.POST['reg_date'] 
     member.save() 
     return redirect('member_overview') 
    return render(request, 'member/member_signup.html') 

urls.py

urlpatterns = [ 
    url(r'^member_edit/(?P<member_no>\d+)$', views.member_edit, name='member_edit') 
] 

member_edit.html

{% block body %} 
<h1 class="logo"><a href="{% url 'member_overview' %}">Members</a></h1> 
<div class="signup"> 
<h2>{% trans 'Update member' %}</h2> 
    <form action="{% url 'member_edit' member.member_no %}" method="post" role="form"> 
    {% csrf_token %} 
     {% for field in form.visible_fields %} 
     <div class="form-group{% if field.errors %} has-error{% endif %}"> 
      <label for="{{ field.label }}">{{ field.label }}</label> 
      <div class="col-sm-10"> 
       {{ field }} 
       {% if field.help_text %} 
       <span class="help-block">{{ field.help_text }}</span> 
       {% endif %} 
       {% for error in field.errors %} 
       <label class="control-label">{{ error }}</label> 
       {% endfor %} 
      </div> 
     </div> 
     {% endfor %} 
    <center> 
    <button type="submit" class="btn btn-primary">{% trans 'Update member' %}</button> 
    </center> 
    </form> 
</div> 
{% endblock body %} 

答えて

2

あなたがコンテキストにフォームを渡していない(とテンプレート名が正しくないように見える?):しかし

def member_edit(request, member_no): 
    member = Member.objects.get(member_no=member_no) 
    if request.method == 'POST': 
     form = RegForm(request.POST or None, instance=member) 
     if form.is_valid(): 
     # This isn't necessary - just save the form 
     #member.first_name = form.request.POST['first_name'] 
     #member.last_name = form.request.POST['last_name'] 
     #member.email = form.request.POST['email'] 
     #member.reg_date = form.request.POST['reg_date'] 
     #member.save() 
     form.save() 
     return redirect('member_overview') 
    # Instantiate the form 
    form = RegForm(instance=member) 
    # Add a dictionary for the context 
    return render(request, 'member/member_edit.html', {'form': form, 'member': member) 

あなたはこのクリーナーを作る(かつ簡単)可能性がありa generic class based viewで:

from django.views import generic 
from django.urls import reverse_lazy 

class UpdateMember(generic.UpdateView): 
    model = Member 
    form_class = RegForm 
    pk_url_kwarg = 'member_no' 
    template_name = 'member/member_edit.html' 
    success_url = reverse_lazy('member_overview') 

は、私はそこにあなたが必要とするすべての属性を持って考える - あなたはCCBVをチェックアウトすることができ、それは、クラスベースのビューのための素晴らしいリソースです。

はテンプレートが、それは私にこのエラーが発生します名前変更 views and templates

+0

のドキュメントを見てみましょう: **引数付きの「member_edit」「(」「」)とキーワード引数 『{}』のためのリバース見つかりません。 1つのパターンが試されました:['member_edit /(?P \\ d +)$'] ** – Niknak

+0

あなたはテンプレートのメンバーを参照していましたが、あなたもコンテキストに渡す必要があります。私の答えを更新しました。ほとんどが –

+0

あー、= O、フォームが空である 今、私はので、私はそれはそれがためにweird..expect https://gyazo.com/c9e64057781744c4bf3878ab42eb829f ラベルが少しあるXD編集でき示されるデータを期待していました左にはないxD – Niknak

関連する問題