如何打印来自 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)
对于循环的一次迭代,从查询集中获取一个对象,我们使用点 (.) 访问它的属性
我正在尝试打印来自 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)
对于循环的一次迭代,从查询集中获取一个对象,我们使用点 (.) 访问它的属性