[英]How to fix this error in Django, "Cannot assign must be an instance."
我需要幫助來解決這個奇怪的錯誤。 我有一個應用程序,老師可以添加作業,然后學生可以提交作業,然后老師可以對其進行評分。 目前,除了對結果進行評分外,其他所有功能都運行良好。
注意:“STUDENT 1”是要對其作業評分的用戶
我知道我使用字符串而不是 integer 作為外鍵字段,但我怎樣才能修復它。 有沒有辦法將字符串轉換為 integer 或如何。 我嘗試了這種方法,但它似乎不起作用。 我嘗試了“Student_ID__student_ID”和 course__Course_Name,它們只是要輸入 model 並使用字符串類型的字段,然后我相信它應該匹配,但我得到了這個錯誤,而不是“Grade_Student()得到了一個意外的關鍵字參數'Student_ID__student_ID'”然后我將“Grade_Student(...)”更改為 Grade_Student.objects.update_or_create(...) 然后得到這個新錯誤“IntegrityError at /en/grading_submit NOT NULL 約束失敗:schoolapp_grade_student.Student_ID_id”然后我嘗試了通過將 Grade_Student_data.save() 更改為 Grade_Student_data.save(commit=False) 來修復它,但它仍然是相同的錯誤。 是否有更多信息需要您幫助我。
錯誤日志
Traceback (most recent call last):
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\sms\schoolapp\views.py", line 1948, in grading_submit
Assignment_name=grade_field_assignment_name, Grade=grade_field, Out_Of_Grade=out_grade_filed)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\db\models\base.py", line 483, in __init__
_setattr(self, field.name, rel_obj)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 220, in __set__
self.field.remote_field.model._meta.object_name,
Exception Type: ValueError at /en/grading_submit
Exception Value: Cannot assign "'STUDENT 1'": "Grade_Student.Student_ID" must be a "add_students_by_manager" instance.
模型.py
class add_courses(models.Model):
Course_Name = models.CharField(max_length=200, blank=True)
Manager_Name = models.ForeignKey(Manager_login_information, on_delete=models.CASCADE, blank=True)
student = models.ManyToManyField(add_students_by_manager, blank=True)
# Start Habib
start_date = models.DateField()
end_date = models.DateField()
# End Habib
def __str__(self):
return self.Course_Name
class add_students_by_manager(models.Model):
manager_ID = models.ForeignKey(Manager_login_information, on_delete=models.CASCADE)
student_ID = models.CharField(max_length=200)
student_name = models.CharField(max_length=200)
def __str__(self):
return self.student_name
class Grade_Student(models.Model):
Student_ID = models.ForeignKey(add_students_by_manager, on_delete=models.CASCADE)
course = models.ForeignKey(add_courses, on_delete=models.CASCADE)
Assignment_name = models.CharField(max_length=200)
Grade = models.IntegerField()
Out_Of_Grade = models.IntegerField()
def __str__(self):
return str(self.Student_ID) + " scored " + str(self.Grade) + " out of " + str(self.Out_Of_Grade) + " in " + str(self.course)
視圖.py
def grading_submit(request):
if request.method=="POST":
grade_field_stu_id = request.POST.get('grade_field_stu_id')
grade_field_course_name = request.POST.get('grade_field_course_name')
grade_field_assignment_name = request.POST.get('grade_field_assignment_name')
grade_field = request.POST.get('grade_field')
out_grade_filed = request.POST.get('out_grade_filed')
print(grade_field, grade_field_stu_id, grade_field_course_name, grade_field_assignment_name, out_grade_filed)
Grade_Student_data= Grade_Student(Student_ID=grade_field_stu_id, course=grade_field_course_name,
Assignment_name=grade_field_assignment_name, Grade=grade_field, Out_Of_Grade=out_grade_filed)
Grade_Student_data.save()
messages.success(request, _("You Successfully Grade a student!"))
return redirect('assignment_page')
else:
return redirect('/')
分級頁面.html
<form class="container pt-5" action="{% url 'grading_submit' %}" method="POST">{% csrf_token %}
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Grade</label>
<input name="grade_field" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
<input name="grade_field_stu_id" value="{{stu_id_grade}}" type="hidden" class="form-control">
<input name="grade_field_course_name" value="{{stu_course_grade}}" type="hidden" class="form-control">
<input name="grade_field_assignment_name" value="{{stu_ass_name_grade}}" type="hidden" class="form-control">
<input name="out_grade_filed" value="{{stu_total_grade}}" type="hidden" class="form-control">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
實際上,您沒有傳遞正確的實例或 id。而不是 Student_ID 嘗試 Student_ID_id,如下所示:
Grade_Student_data= Grade_Student(Student_ID_id=grade_field_stu_id, course_id=grade_field_course_name,
Assignment_name=grade_field_assignment_name, Grade=grade_field, Out_Of_Grade=out_grade_filed)
Grade_Student_data.save()
其中grade_field_stu_id 將是 integer 中的 id 即: 1. 對您的課程字段也執行相同的操作。
希望它對你有用。
我能夠通過改變這個來解決這個問題:
Grade_Student_data= Grade_Student(Student_ID=grade_field_stu_id, course=grade_field_course_name,
Assignment_name=grade_field_assignment_name, Grade=grade_field, Out_Of_Grade=out_grade_filed)
對此:
Grade_Student_data = Grade_Student(Student_ID=add_students_by_manager.objects.get(student_ID=grade_field_stu_id), course=add_courses.objects.get(Course_Name=grade_field_course_name), Assignment_name=grade_field_assignment_name, Grade=grade_field, Out_Of_Grade=out_grade_filed)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.