簡體   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