【问题标题】:QuerySet object has no attribute serializeQuerySet 对象没有属性序列化
【发布时间】:2020-08-22 12:00:51
【问题描述】:

views.py

import json
from django.shortcuts import get_object_or_404
from django.core.serializers import serialize
from django.shortcuts import render
from django.http import JsonResponse, HttpResponse
from django.views.generic import View
from RestAPI.mixin import JsonResponseMixIn
from .models import Update   

class SerializedListView(View):
    def get(self , request , *args , **kwargs):
        qs = Update.objects.all()
        qs = qs.serialize() #error in this line
        return HttpResponse(qs , content_type="application/json")

serialize 方法与 get() 方法一起工作正常,但它在 all() 方法中引发错误

异常值:
“QuerySet”对象没有“序列化”属性

models.py

import json
from django.core.serializers import serialize
from django.db import models
from django.conf import settings

# Create your models here.



class UpdateQuerySet(models.QuerySet):
    def serialize(self):
        list_values = list(self.values("uesr","content","image"))
        return json.dumps(list_values)

class UpdateManager(models.Manager):
    def get_queryset(self):
        return UpdateQuerySet(self.model, using=self._db)

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    我认为你可以定义 One serializer 并获取如下数据:

    class UpdateSerializer(serializers.ModelSerializer):
        class Meta:
            model = Update
            fields = ("user", "content", "schedule", "image")
    

    view 中更改为:

    class SerializedListView(View):
        def get(self , request , *args , **kwargs):
            qs = Update.objects.all()
            serializer = UpdateSerializer(qs, many=True)
            return HttpResponse(serializer.data , content_type="application/json")
    

    【讨论】:

    • 代码中的一点点改变对我有用。 serialzer = UpdateSerializer(qs , many=True)
    【解决方案2】:
    class Update(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        content = models.TextField(blank=True, null=True)
        image = models.ImageField(upload_to=upload_update_image, blank=True, null=True)
        timestamp = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)
    
        objects = UpdateManager()
    
        def __str__(self):
            return self.content or ""
    

    您必须在模型中有 objects = UpdateManager() 才能工作。

    【讨论】:

    • 请修正你的缩进
    • 当然。我没有想到这一点。在stackoverflow中有自动方法吗?将来会有所帮助。
    猜你喜欢
    • 2020-06-20
    • 2021-07-09
    • 1970-01-01
    • 2020-10-31
    • 2021-06-12
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多