繁体   English   中英

使用 Django rest 框架的序列化程序丢弃记录

[英]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')

以下是我需要得到的响应示例。

例子:

  1. 正确的
[
{
  "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"
}
]
  1. 不正确
[
{
  "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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM