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'
Вернуться на верх