如何打印来自 Django 模型的过滤结果

How to print filtered results from django model

我正在尝试打印来自 Django 模型的过滤结果。这是我的代码

record = StudentInfo.objects.filter(Name=name, 
                                    School=school, 
                                    City=city, 
                                    Country=country)

我知道有 4 个条目符合筛选条件。我现在想打印记录。但是当我尝试

print(record)

我得到以下信息

[<StudentInfo: StudentInfo object (1)>, <StudentInfo: StudentInfo object (4)>, <StudentInfo: StudentInfo object (6)>, <StudentInfo: StudentInfo object (8)>]

如何将整个记录打印为列表?

您在模型实例中看到的 StudentInfo object (1) 是模型实例的表示。您可以通过覆盖模型上的 str 方法来更改它。

class StudentInfo(models.Model):
    # fields

    def __str__(self):
        return self.Name

它看起来像这样。 [<StudentInfo: StudentName>, ..]

将模型的所有字段添加到 str 方法并不是一个好方法。 如果您想查看有关模型实例的更多信息,请在您的模型上创建另一个方法并使用它。

class StudentInfo(models.Model):
    # fields

    def __str__(self):
        return self.Name

    def detail(self):
        return f"Name: {self.name}, School: {self.school} ..."

像这样打印你的学生。

for student in record:
    print(student.detail())

此外,最好在模型字段中使用所有小写字符。您可能需要遵循 PEP-8 规则以获取更多信息。

据我了解你的问题,一个学生可以有多个记录。所以最好使用 SerializerMethodField.

在你的学生序列化器上,你可以做类似的事情 (考虑到您有 StudentInfo 的序列化程序)

class StudentSerializer(serializer.ModelSerializer):
    record = serializer.SerializerMethodField()
    class Meta:
       model = Student
       fields = "__all__" 
    def get_record(self, obj):
        record = StudentInfo.objects.filter(Name=name, 
                                    School=school, 
                                    City=city, 
                                    Country=country)
        return StudentInfoSerializer(record, many=True).data

此后,每次使用StudentSerializer,都会得到相关记录的列表。

当你在 django 中使用 filter() 方法时,它 returns 满足条件的所有结果。 filter()返回的结果叫做Queryset。

[, , , ]

这是一个查询集。 查询集是一个对象列表。

要打印结果:

for item in record:
    print(item.Name)
    print(item.Country)
    print(item.School)
    print(item.City)

对于循环的一次迭代,从查询集中获取一个对象,我们使用点 (.) 访问它的属性