1
Django 1.6でPython 2.7.13(x86)で例外が発生しましたが、これを修正する方法がわかりません。私はすでに答えのために他の投稿を検索しましたが、役に立たなかった。 私はこれについていて、しばらく車輪を回転させています。Django 1.6、all()throwsエラー:中間モデルを指定するManyToManyFieldに値を設定できません
Cannot set values on a ManyToManyField which specifies an intermediary model. Use MyApp.ClassStudents's Manager instead.
:これは私が取得していますエラーメッセージです
myNewClass.class_students = selectedClass.class_students.all()
は、以下の完全なコード例を参照してください...:
これは例外をスローしたコードの行があります
(上記のエラーメッセージの場合、私のアプリは「MyApp」と呼ばれます...)
all()がうまくいかないようですが、これを修正するにはどうしますか? あなたは私がこれを解決するのを助けるか、少なくとも正しい方向に私を向けることができますか?
ありがとう。ここで
は私のコードです:ここでは
class Class(models.Model):
courseNumber = models.IntegerField()
courseName = models.CharField(max_length = 32)
class_students = models.ManyToManyField(Student, blank = True, through = 'ClassStudent')
class Student(models.Model):
studentName = models.CharField(max_length = 32)
overallStudentGPA = models.IntegerField()
class ClassStudent(models.Model):
myClass = models.ForeignKey(Class, on_delete = models.CASCADE)
myStudent = models.ForeignKey(Student, on_delete = models.CASCADE)
studentClassGrade = models.IntegerField()
def copy_class(modeladmin, request, queryset):
for selectedClass in queryset:
myNewClass = Class(courseNumber = selectedClass.courseNumber, courseName = selectedClass.courseName)
myNewClass.courseNumber = selectedClass.courseNumber
myNewClass.courseName = selectedClass.courseName
# Throws an error:
# Cannot set values on a ManyToManyField which specifies an intermediary model. Use MyApp.ClassStudents's Manager instead.
myNewClass.class_students = selectedClass.class_students.all()
myNewClassを保存してから 'selectedClass.class_students.all()'をループし、新しいClassを指す 'ClassStudent'の新しいインスタンスを作成することができます。 –
これを直接設定できない理由は、ドキュメントで説明されています。 [通常の多対多フィールドと異なり、リレーションシップを作成するためにadd()、create()、またはset()を使用することはできません](https://docs.djangoproject.com/ja/1.11/topics/db/)モデル/#余分なフィールドの多対多関係) –
ありがとうございました! – Erik343