[英]Discard records using serializers of Django rest framework
我需要丢弃所有没有关联图像的记录。 这必须在序列化程序中实现。
如果意见中有解决方案,也欢迎。
我有这些模型
class Activity(models.Model):
""" Class Activity """
name = models.CharField(max_length = 200, null = False, blank = False)
create_at = models.DateTimeField('Create date', auto_now_add = True, editable = False)
update_at = models.DateTimeField('Last update', auto_now = True)
class Image(models.Model):
""" Image of an activity """
activity = models.ForeignKey(Activity, related_name = 'images', on_delete = models.CASCADE)
image = models.ImageField(upload_to = 'files/images')
以及以下序列化程序
class ImageModelSerializer(serializers.ModelSerializer):
""" Image model serializer """
class Meta:
model = Image
fields = ('id', 'image')
class ActivityModelSerializer(serializers.ModelSerializer):
""" Activity model serializer """
images = ImageModelSerializer(read_only = True, many = True)
class Meta:
model = Activity
fields = ('id', 'name', 'images', 'create_at')
以下是我需要得到的响应示例。
例子:
[
{
"id": 1,
"name": "Activity 1",
"images": [
{"id": 1, "image": "path to image 1"},
{"id": 2, "image": "path to image 2"}
],
"create_at": "2021-04-07T15:58:15.409054Z"
},
{
"id": 3,
"name": "Activity 3",
"images": [
{"id": 3, "image": "path to image 1"},
{"id": 4, "image": "path to image 2"}
],
"create_at": "2021-04-07T15:58:15.409054Z"
}
]
[
{
"id": 1,
"name": "Activity 1",
"images": [
{"id": 1, "image": "path to image 1"},
{"id": 2, "image": "path to image 2"}
],
"create_at": "2021-04-07T15:58:15.409054Z"
},
{
"id": 2,
"name": "Activity 2",
"images": [],
"create_at": "2021-04-07T15:58:15.409054Z"
},
{
"id": 3,
"name": "Activity 3",
"images": [
{"id": 3, "image": "path to image 1"},
{"id": 4, "image": "path to image 2"}
],
"create_at": "2021-04-07T15:58:15.409054Z"
}
]
谢谢你,你可以帮助我!
您需要覆盖 API 视图中的查询集:
class ActivityModelSerializerViewSet(viewsets.ModelViewSet):
queryset = Activity.objects.filter(add_filtering_rules_here)
serializer_class = ActivityModelSerializer
此外,您需要检查图像字段在数据库中的表示方式,以便设置正确的过滤器。 可能这个(或类似的)应该可以工作,但你必须先测试它:
Activity.objects.filter(images__image__isnull=False)
Activity.objects.exclude(images__image='')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.