2017-03-04 12 views
0

edit_transactionビューを読み込もうとすると、上記のエラーメッセージが表示されます。私はエラーが何を意味するのか知っていますが、それが以前に働いていたように起こっている理由を理解しておらず、別の同様のページでも動作しています。必要に応じてより多くのコードを提供することができますが、私はそれを見ることができないように、何かがここではっきりと明白であると思っています。Djangoのサイトでエラーが発生しました__init __()がありません1必要な位置引数:ビューを呼び出すときに '要求'

完全トレースバック:

トレースバック:

ファイル「/Users/c/.virtualenvs/django-budget/lib/python3.5/site->packages/django/core/handlers/ "インナー 42応答= GET_RESPONSE(リクエスト)で

ファイル" exception.py /Users/c/.virtualenvs/django-budget/lib/python3.5/site->packages/django/core/handlers/ _get_responseの "base.py" 187. response = self.process_exception_by_middleware(e、request)

ファイル「/Users/c/.virtualenvs/django-budget/lib/python3.5/site-packages/django/core/handlers/base.py」in _get_response 185. response = wrapped_callback(request、*) callback_args、** callback_kwargs)_wrapped_view 23リターンで

ファイル "/Users/c/.virtualenvs/django-budget/lib/python3.5/site-packages/django/contrib/auth/decorators.py" view_func(要求、* argsを、** kwargsから)

edit_transaction 83.フォーム= TransactionForm(インスタンス=トランザクション)で

ファイル "/Users/c/sites/budget/budget/views.py"

例外の種類:/予算/トランザクション/ 3 /編集/ 例外値ではTypeError:

エキスurls.pyからの要求 ':

url(r'^transaction/(?P<pk>[0-9]+)/edit/$', views.edit_transaction, name='edit_transaction'), 
1が欠落し のinitは()位置引数を必要と

views.pyからの抜粋:

@login_required 
def edit_transaction(request, pk): 
    transaction = get_object_or_404(Transaction, pk=pk) 
    if request.method == "POST": 
     form = TransactionForm(request.POST, instance=transaction) 
     if form.is_valid(): 
      transaction = form.save(commit=False) 
      transaction.updated = timezone.now() 
      transaction.save() 
      return redirect('view_transaction_detail', pk=transaction.pk) 
    else: 
     form = TransactionForm(instance=transaction) 
    return render(request, 'budget/new_transaction.html', {'form': form}) 

テンプレートエキス:

あなたが書く必要がありますように
{% extends 'budget/base.html' %} 

{% block content %} 

    <h2>{{ transaction.title }}</h2> 
    <h4>{{ transaction.date }}</h4> 
    <h4>Transaction type: {{ transaction.transaction_type }}</h4> 
    <h4>Category: {{ transaction.category }}</h4> 
    <h4>Budgeted amount: {{ transaction.budgeted_amount }}</h4> 
    <h4>Actual amount: {{ transaction.actual_amount }}</h4> 
    <h4>Difference: {{ difference }}</h4> 
    <h4>Comments: {{ transaction.comments }}</h4> 

    <a class="btn btn-default" href="{% url 'edit_transaction' pk=transaction.pk %}"><span class="glyphicon glyphicon-pencil"></span></a> 
    <a class="btn btn-default" href="{% url 'delete_transaction' pk=transaction.pk %}"><span class="glyphicon glyphicon-remove"></span></a> 
    <h5><a href="{% url 'summary' %}">Back to summary</a></h5> 

{% endblock %} 

編集が

class TransactionForm(forms.ModelForm): 

    class Meta: 
     model = Transaction 
     fields = ('title', 'transaction_type', 'category', 'budgeted_amount', 'actual_amount', 'date', 'comments',) 

    #new_category field to allow you to add a new category 
    new_category = forms.CharField(max_length=30, required=False, label="New Category Title") 

    def __init__(self, request, *args, **kwargs): 
     super(TransactionForm, self).__init__(*args, **kwargs) 
     #category is now not a required field because you will use category OR new_category 
     self.fields['category'].required=False 
     #set to allow use of self.request.user to set user for category 
     self.request = request 

    def clean(self): 
     category = self.cleaned_data.get('category') 
     new_category = self.cleaned_data.get('new_category') 
     if not category and not new_category: 
      # raise an error if neither a category is selected nor a new category is entered 
      raise forms.ValidationError('Category or New category field is required') 
     elif not category: 
      # create category from new_category 
      category, created = Category.objects.get_or_create(title=new_category, defaults={'user': self.request.user}) 
      self.cleaned_data['category'] = category 

     return super(TransactionForm, self).clean() 
+0

あなたはTransactionFormのコードを表示することができます? –

+0

要求通りにコードを追加するように編集しました – pasta1020

+0

そのコードが示すように、フォームの署名を変更して、 'request'引数を必要としました。こんにちはRubyがその引数を提供する必要があります。どちらの場合でも、ビューでフォームをインスタンス化する必要があります。 –

答えて

1

TranscationFormコードを追加することは思わ:

form = TransactionForm(request=request, instance=transaction) 

の代わり:

form = TransactionForm(request.POST, instance=transaction) 
+0

ありがとう。'form = TransactionForm(instance = transaction)'を 'form = TransactionForm(request = request、instance = transaction)'に変更し、ビューが正しくロードされるようになりましたが、フォームが変更を保存しないという別の問題があります。 – pasta1020

+0

フォームに保存する場所に到達したかどうかを確認しますか? –

+0

は、検証段階でエラーを返すフォームですか? –

関連する問題