Lesson() получил неожиданный аргумент ключевого слова 'invoice_number'
У меня не получается сохранить данные формы, чтобы передать их в таблицу для списка на странице администратора. Поскольку я довольно новичок в Django, я не знаю, что не так с моим методом сохранения в form.py Я пробовал super().save(commit=False), но я не совсем уверен, как его использовать. Насколько я понимаю, он используется для манипулирования данными до того, как они будут сохранены в базе данных. Однако я не уверен, что это именно мой случай. Не мог бы кто-нибудь объяснить, почему возникла моя ошибка, и объяснить, когда следует использовать super.save() и super.save(commit=False)?
models.py
class Lesson(models.Model):
lesson_id = models.AutoField(primary_key=True)
lesson_name = models.CharField(max_length=255)
student = models.ForeignKey(User,on_delete=models.DO_NOTHING,related_name='studying')
teacher = models.ForeignKey(User,on_delete=models.CASCADE, related_name='teaching')
start_time = models.DateTimeField(default=timezone.now)
interval = models.IntegerField()
duration = models.IntegerField()
created_at = models.DateTimeField(default=timezone.now, blank=True)
updated_at = models.DateTimeField(default=timezone.now, blank=True)
is_request = models.BooleanField()
number = models.IntegerField(default=-1)
price = models.IntegerField(default=-1, blank=True)
invoice_number = models.CharField(max_length=10)
@property
def invoice_number(self):
strStudentId = str(self.student_id)
strLessonId = str(self.lesson_id)
return strStudentId + "-" + strLessonId
@property
def price(self):
return self.duration/5 * self.number
forms.py
class InvoiceForm(forms.Form):
invoice_number = forms.CharField(label="Invoice Number")
total_payable = forms.IntegerField(label="Total Payable")
def save(self):
"""Create a new invoice request."""
lesson = Lesson.objects.create(
invoice_number = self.cleaned_data.get('invoice_number'),
price = self.cleaned_data.get('price'),
is_request = False,
)
return lesson
views.py
def invoice(request, lesson_id):
if request.method == 'POST':
form = InvoiceForm(request.POST)
if form.is_valid():
messages.add_message(request, messages.SUCCESS, "You have paid for your lesson!")
form.save()
return HttpResponseRedirect(reverse('requests'))
else:
messages.add_message(request, messages.ERROR, "Failed to Add Invoice")
return HttpResponseRedirect(invoice)
else:
lesson = Lesson.objects.get(lesson_id=lesson_id)
current_lesson = {
'invoice_number': lesson.invoice_number,
'total_payable': lesson.price,
}
form = InvoiceForm(initial=current_lesson)
return render(request, 'invoice.html', {'lesson':lesson, 'form':form})
#@login_required(login_url='/admin_login/')
def adminInvoiceRequests(request):
return render(request,'admin/invoice_requests.html',)
invoice.html
<div class="card">
<div class="card-body">
<h5 class="card-title">Your Invoice</h5>
<p class="card-text">{% for message in messages %}</p>
<p><b>{{ message }}</b></p>
{% endfor %}
<form action="{% url 'invoice' lesson.lesson_id %}" method="post">
{% csrf_token %} {{ form.as_p }}
<input type="submit" value="submit">
</form>
</div>
traceback
Internal Server Error: /invoice/31
Traceback (most recent call last):
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/jaeholee/hyena/lessons/views.py", line 137, in invoice
form.save()
File "/Users/jaeholee/hyena/lessons/forms.py", line 130, in save
lesson = Lesson.objects.create(
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/db/models/query.py", line 431, in create
obj = self.model(**kwargs)
File "/Users/jaeholee/hyena/venv/lib/python3.10/site-
packages/django/db/models/base.py", line 500, in __init__
raise TypeError("%s() got an unexpected keyword argument '%s'" % (cls.__name__,
kwarg))
TypeError: Lesson() got an unexpected keyword argument 'invoice_number'