TypeError at /admin_update/2/ BaseForm.__init__() got an unexpected keyword argument 'instance'
Я пытаюсь обновить представление таблицы. Я передал первичный ключ в update_requests.html, чтобы я мог предварительно заполнить форму моделью с первичным ключом. Однако я думаю, что проблема в модели. Когда я пытаюсь получить доступ к update_requests.html, он выдает ошибку, описанную в заголовке. Может ли кто-нибудь помочь мне с этим?
urls.py `
path('admin_update/<str:pk>/', views.AdminUpdateRequests, name='admin_update'),
`
views.py `
def AdminManageRequests(request):
lessons = Lesson.objects.all()
return render(request,'admin/manage_requests.html',{'lessons':lessons})
def AdminUpdateRequests(request, lesson_id):
lesson = Lesson.objects.get(pk=lesson_id)
form = StudentRequestForm(request.POST or None, instance=lesson)
context = {
'lesson':lesson, 'form':form
}
return render(request, 'admin/update_requests.html',context)
`
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(default=0)
duration = models.IntegerField(default=0)
created_at = models.DateTimeField(default=timezone.now, blank=True)
updated_at = models.DateTimeField(default=timezone.now, blank=True)
is_request = models.BooleanField(default=True)
number = models.IntegerField(default=-1)
price = models.IntegerField(default=-1, blank=True)
manage_requests.html `
{% extends 'admin/admin_home_base.html' %}
{% block admin_content %}
<div>
<h3 class="display-8" style="text-align:center">
Admin Lesson Request Management
</h3>
<hr class="my-4">
<p style="text-align:center">
You can view fulfilled and unfulfilled lesson requests.
</p>
<p class="lead" style="text-align:center">
{% include 'admin/partials/fulfilled_lessons.html' %}
<br>
{% include 'admin/partials/unfulfilled_lessons.html' %}
</p>
</div>
{% endblock %}
lessons_table_base.html `
`
<div class="card">
<div class="card-header">
<h5 class="card-title">{% block card_title %}{% endblock %}</h5>
<div class="card-body table-responsive p-0">
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>Lesson ID</th>
<th>Lesson Name</th>
<th>Student</th>
<th>Teacher</th>
<th>Interval (Days)</th>
<th>Duration (Minutes)</th>
<th></th>
</tr>
</thead>
<tbody>
{% for lesson in lessons %}
{% block lessons_content %}
{% endblock %}
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
`
fulfilled_lessons.html `
`
{% extends 'admin/partials/lessons_table_base.html' %}
{% load widget_tweaks %}
{% block card_title %}
Fulfilled Requests <i class="bi-send-check-fill"></i>
{% endblock %}
{% block lessons_content %}
{% if not lesson.is_request %}
<tr>
<td>{{ lesson.lesson_id }}</td>
<td>{{ lesson.lesson_name }}</td>
<td>{{ lesson.student }}</td>
<td>{{ lesson.teacher }}</td>
<td>{{ lesson.interval }}</td>
<td>{{ lesson.duration }}</td>
<td>
<!-- admin edit lesson here -->
<a href="{% url 'admin_update' lesson.lesson_id %}">update</a>
<!-- admin delete lesson here -->
<a href="#" class="nav-link" role="button" data-bs-toggle="tooltip" title="Remove lesson">
<span class="bi-dash-square"></span>
</a>
</td>
</tr>
{% endif %}
{% endblock %}
`
updates_requests.html (будет добавлен дополнительный код, когда проблема будет решена.) `
`
{% extends 'admin/admin_home_base.html' %}
{% block admin_content %}
<div>
<h2 style="text-align:center">
Update Lesson Request
</h2>
<hr class="my-4">
<p style="text-align:center">
You can update lessons to the system.
</p>
<form action="" method=POST>
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Update" class="btn btn-secondary">
</form>
</div>
{% endblock %}
`
forms.py `
class AdminLessonForm(forms.Form):
"""Form enabling admin users to create new lessons."""
subject_choices = [(i, i) for i in Lesson.subjects()]
duration_choices = [(i, i) for i in Lesson.durations()]
interval_choices = [(i, i) for i in Lesson.intervals()]
lesson_request = forms.ModelChoiceField(label="Lesson Request",queryset=Lesson.objects.filter(is_request=True), widget=forms.Select(attrs={"class":"form-control"}))
lesson_name = forms.ChoiceField(label="Lesson name", choices=subject_choices, widget=forms.Select(attrs={"class":"form-control"}))
teacher = forms.ModelChoiceField(label="Teacher",queryset=Teacher.teacher.all(), widget=forms.Select(attrs={"class":"form-control"}))
start_time = forms.DateTimeField(label="Start time [Day/Month/Year Hour:Minute]",input_formats=['%d/%m/%Y %H:%M'],
widget=forms.DateTimeInput(format='%d/%m/%Y %H:%M',attrs={'class':'form-control'}))
interval = forms.ChoiceField(label="Interval [Days]", choices=interval_choices, widget=forms.Select(attrs={"class":"form-control"}))
duration = forms.ChoiceField(label="Duration [Minutes]", choices=duration_choices, widget=forms.Select(attrs={"class":"form-control"}))
number = forms.IntegerField(label="Number of Lessons", widget=forms.NumberInput(attrs={"class":"form-control"}))
def save(self):
"""Create a new lesson."""
request = self.cleaned_data.get('lesson_request')
lesson = Lesson.objects.create(
lesson_name = self.cleaned_data.get('lesson_name'),
student = request.student,
teacher = self.cleaned_data.get('teacher'),
start_time = self.cleaned_data.get('start_time'),
interval = int(self.cleaned_data.get('interval')),
duration = int(self.cleaned_data.get('duration')),
number = self.cleaned_data.get('number'),
is_request = False,
)
lesson.price = self.calculate_price(lesson.duration, lesson.number)
request.delete()
return lesson
`
отступления `
Internal Server Error: /admin_update/2/
Traceback (most recent call last):
File "/Users/jaeholee/SEG-Small-Group-Project/hyena/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jaeholee/SEG-Small-Group-Project/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/SEG-Small-Group-Project/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/SEG-Small-Group-Project/hyena/lessons/views.py", line 60, in AdminUpdateRequests
form = AdminLessonForm(instance=lesson)
TypeError: BaseForm.__init__() got an unexpected keyword argument 'instance'
`
Я не знаю, что попробовать