嘗試獲取序列化程式 StudentSerializer 上的欄位名稱值時出現 AttributeError。序列化程式欄位可能命名不正確,并且與 QuerySet 實體上的任何屬性或鍵都不匹配。原始例外文本是:“QuerySet”物件沒有屬性“名稱”。
我的模型.py:
class Student(models.Model):
name = models.CharField(max_length=45, verbose_name="ФИО")
..
class Group(models.Model):
name = models.SmallIntegerField(verbose_name="Номер группы")
..
class StudentInGroup(models.Model):
input_Students = models.DateField(verbose_name="Студент вступил в группу")
output_Students = models.DateField(
verbose_name="Студент покинул группу", blank=True, null=True)
students = models.ManyToManyField(
Student, verbose_name="Студент", related_name="Group")
groups = models.ManyToManyField(
Group, verbose_name="Группа", related_name="StudentInGroup")
..
class Subject(models.Model):
name = models.CharField(max_length=50, verbose_name="Название предмета")
groups = models.ForeignKey(Group, on_delete=models.PROTECT)
..
class Lesson(models.Model):
date = models.CharField(max_length=15, verbose_name="Дата занятия")
subjects = models.ForeignKey(
Subject, verbose_name="Проведенные занятия", blank=True, on_delete=models.PROTECT)
groups = models.ForeignKey(
Group, verbose_name="Группа на занятии", blank=True, on_delete=models.PROTECT)
..
class Progress(models.Model):
students = models.ForeignKey(
Student, on_delete=models.PROTECT, verbose_name="Студент", blank=True)
lessons = models.ForeignKey(
Lesson, on_delete=models.PROTECT, verbose_name="Занятия", blank=True)
attendance = models.CharField(
max_length=3, default='Да', verbose_name='Присутствие')
grade = models.PositiveSmallIntegerField(
verbose_name='Оценка за занятие', default=0)
我的意見.py:
@api_view(['GET', 'POST'])
def subject_detail(request, pk):
if request.method == 'GET':
subjects = Subject.objects.get(pk=pk)
#view_subjects = Subject.objects.filter(pk=pk)
lessons = subjects.lesson_set.order_by('date')
view_progreses = []
for lesson in lessons:
progress = lesson.progress_set.all()
view_progreses.append(progress)
relationships = subjects.groups.StudentInGroup.all()
view_students = []
for relationship in relationships:
student = relationship.students.all()
view_students.append(student)
subjects_serializer = SubjectSerializer(subjects) # many=True
lessons_serializer = LessonSerializer(lessons, many=True)
students_serializer = StudentSerializer(view_students, many=True)
progreses_serializer = ProgressSerializer(view_progreses, many=True)
response_results = {
'subjects_serializer': subjects_serializer.data,
'lessons_serializer': lessons_serializer.data,
'progreses_serializer': progreses_serializer.data,
'students_serializer': students_serializer.data,
}
return Response(response_results)
我為每個模型撰寫了一個單獨的序列化程式。每個序列化器都是相同的
我的serilizers.py:
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = '__all__'
class StudentInGroupSerializer(serializers.ModelSerializer):
class Meta:
model = StudentInGroup
fields = '__all__'
class SubjectSerializer(serializers.ModelSerializer):
class Meta:
model = Subject
fields = '__all__'
uj5u.com熱心網友回復:
.all() 方法回傳一個 QuerySet 而不是物件串列,這正是您想要的。使用 .get() 方法遍歷 QuerySets 以獲取單個物件:-)
這是有關此的檔案。祝你好運
uj5u.com熱心網友回復:
請同時添加您的序列化程式代碼,因為模型和視圖看起來不錯。
uj5u.com熱心網友回復:
我回答了我的問題。有必要改寫如下:
@api_view(['GET', 'POST'])
def subject_detail(request, pk):
if request.method == 'GET':
subjects = Subject.objects.get(pk=pk)
#view_subjects = Subject.objects.filter(pk=pk)
lessons = subjects.lesson_set.order_by('date')
view_progreses = []
for lesson in lessons:
for progress in lesson.progress_set.all():
view_progreses.append(progress)
group = subjects.groups
relationships = group.StudentInGroup.all()
view_students = []
# for relationship in relationships:
# student = relationship.students.all()
# view_students.append(student)
for relationship in relationships:
for student in relationship.students.all():
view_students.append(student)
subjects_serializer = SubjectSerializer(subjects) # many=True
lessons_serializer = LessonSerializer(lessons, many=True)
students_serializer = StudentSerializer(view_students, many=True)
progreses_serializer = ProgressSerializer(view_progreses, many=True)
response_results = {
'subject': subjects_serializer.data,
'lesson': lessons_serializer.data,
'progress': progreses_serializer.data,
'student': students_serializer.data,
}
return Response(response_results)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/440219.html
標籤:Python django 休息 django-rest-framework
上一篇:將[FromRoute]和[FromBody]系結到一個模型中
下一篇:慘,給Go提的代碼被批麻了
