[英]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.