簡體   English   中英

如何修復 Django 中的此錯誤,“無法分配必須是實例。”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM