當我嘗試加載我的edit_transaction視圖時,出現上述錯誤消息。我知道錯誤意味着什麼,但不明白爲什麼它發生在以前的工作中,並仍然在另一個類似的頁面上工作。如果需要的話可以提供更多的代碼,我想知道,如果在這裏有一些非常明顯的東西,那麼我看不到它。Django網站,獲取錯誤__init __()缺少1需要的位置參數:調用視圖時的'請求'
完全回溯:
回溯:
文件「/Users/c/.virtualenvs/django-budget/lib/python3.5/site->packages/django/core/handlers/ exception.py「in 42. response = get_response(request)
File」/Users/c/.virtualenvs/django-budget/lib/python3.5/site->packages/django/core/handlers/ base.py「in _get_response 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)
文件 「/Users/c/.virtualenvs/django-budget/lib/python3.5/site-packages/django/contrib/auth/decorators.py」 在_wrapped_view 23回view_func(請求,*指定參數時,** kwargs)
在edit_transaction 83.形式= TransactionForm(例如=交易)文件 「/Users/c/sites/budget/budget/views.py」
異常類型:類型錯誤在/預算/交易/ 3 /編輯/ 異常值:缺少1 INIT()所需的位置參數:從urls.py
提取物 '請求':
url(r'^transaction/(?P<pk>[0-9]+)/edit/$', views.edit_transaction, name='edit_transaction'),
@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})
模板提取物:從views.py
提取物
{% 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 %}
編輯補充TranscationForm代碼
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()
您可以顯示TransactionForm代碼? –
編輯爲按要求添加代碼 – pasta1020
如代碼所示,您已修改表單的簽名以要求「請求」參數。你需要Ruby提供這個參數,無論你在視圖中實例化表單。 –