У меня есть эта очень простая форма, но я продолжаю получать сообщение об ошибке
init() takes 1 positional argument but 2 were given
Вот мой код:
модели.py
class Feedback(models.Model):
name = models.CharField(max_length=100)
contact = models.CharField(max_length=12)
title = models.CharField(max_length=120)
description = models.TextField(blank=True, null=True)
summary = models.TextField(blank=False, null=False)
created_on = models.DateTimeField(auto_now_add=True)
формы.py
class Feedback_form(BSModalForm):
class Meta:
model = Feedback
fields = ['name', 'contact', 'title', 'description', 'summary']
просмотры.py
@login_required
class Feedback_Create(BSModalCreateView):
template_name = 'classroom/teachers/feedback.html'
form_class = Feedback_form
success_message = 'Success: Sign up succeeded. You can now Log in.'
success_url = reverse_lazy('classroom:feedback_form')
urls.py
path('feedback/', teachers.Feedback_Create, name='feedback'),
обратная связь.html
{% load widget_tweaks %}
<form method = "post" action = "">
{% csrf_token %}
<div class = "modal-header">
<h3 class = "modal-title">Create Book</h3>
<button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close">
<span aria-hidden = "true">×</span>
</button>
</div>
<div class = "modal-body">
<div class = "{% if form.non_field_errors %}invalid{% endif %} mb-2">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</div>
{% for field in form %}
<div class = "form-group">
<label for = "{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class = "form-control" placeholder=field.label %}
<div class = "{% if field.errors %} invalid{% endif %}">
{% for error in field.errors %}
<p class = "help-block">{{ error }}</p>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
<div class = "modal-footer">
<button type = "button" class = "submit-btn btn btn-primary">Create</button>
</div>
</form>
Я не понимаю, что я делаю неправильно здесь. Я установил библиотеку просто отлично и добавил соответствующее имя в файле install_apps в файле настроек. Я продолжаю получать ошибку:
TypeError at /shipper/feedback/ init() takes 1 positional argument but 2 were given Request Method: GET Request URL: http://127.0.0.1:8000/shipper/feedback/ Django Version: 2.0.1 Exception Type: TypeError Exception Value:
init() takes 1 positional argument but 2 were given Exception Location: C:\Users\idadarklord\AppData\Local\Programs\Python\Python37\lib\site-packages\django\contrib\auth\decorators.py in _wrapped_view, line 21
Я пытаюсь установить простую всплывающую форму обратной связи, как показано здесь.
Вы используете login_required
в представлении на основе классов, если вы хотите сделать это, вам нужно использовать method_decorator
. Взгляните на документы https://docs.djangoproject.com/en/2.2/topics/class-based-views/intro/#decorating-the-class
И в вашем urls.py вам нужно вызвать .as_view()
для представлений на основе классов.
path('feedback/', teachers.Feedback_Create.as_view(), name='feedback'),
@RohitKumar Обновил мой ответ, который вы забыли вызвать as_view
в своем классе. Кроме того, более pythonic/соглашение не использовать подчеркивание в именах ваших классов FeedbackCreate
Я тоже пробовал это, но когда я использую as_view(), это дает мне ошибку, в которой говорится, что вместо 1 были заданы 2 аргумента.
Вы сделали оба изменения? Потому что, судя по тому, что вы показываете, эти изменения должны это исправить. Также взгляните на отмеченный повторяющийся ответ (stackoverflow.com/questions/53572251/…)
Я только что удалил декоратор, но все равно получаю ту же ошибку.