Das Serialisieren von Daten ergibt sich aus der Abfrage mit select_related in json

Wie serialisiere ich die Ausgabe einer Abfrage mit select related in einen JSON? Wenn ich Daten aus der Abfrage mit select_related serialisiere, enthält der resultierende JSON keine verwandten Felddaten.

Tabellenschema.

from django.db import models
class User(models.Model)
   username = models.CharField(max_length=30)
   first_name = models.CharField(max_length=30)
   last_name = models.CharField(max_length=30)
   email = models.CharField(max_length=50)

class Userinfo(models.Model)
   userId = models.oneToOneField(User)
   userImg = models.TextField()
   city = models.CharField(max_length=30)
   says = models.CharField(max_length=200)

Abfrage mit select related

 from django.core import serializers
 json_serializer = serializers.get_serialier("json")()
 uinfo = Userinfo.objects.filter(userId=1).select_related('userId')
 response = json_serializer.serialize(uinfo, ensure_ascii=False, indent=2, use_natural_keys=True)

Das Ergebnis der Antwort ist

[{
  "pk": 1, 
  "model": "userinfo", 
  "fields": {
    "city": "mycity", 
    "says": "Hi, its me", 
    "userImg": "profile_img.png", 
    "userId": [ "user1" ] 
  }
}]

während das Ergebnis angenommen wird

[{
  "pk": 1, 
  "model": "userinfo", 
  "fields": {
    "city": "mycity", 
    "says": "Hi, its me", 
    "userImg": "profile_img.png", 
    "userId": [{ 
        "username" : "user1",
        "first_name" : "User",
        "last_name" : "ls1",
        "email" : "[email protected]"
    }] 
  }
}]

Ich habe die Abfrage mithilfe von Werten geändert, anstatt "verwandt" auszuwählen, aber dieser Fehler tritt auf

uinfo = Userinfo.objects.filter(userId=1).values('userImg', 'city', 'says', 'userId__username', 'userId__first_name', 'userId__email')
response = json_serializer.serialize(uinfo, ensure_ascii=False, indent=2, use_natural_keys=True)

Error:

 concrete_model = obj._meta.concrete_model
 AttributeError: 'dict' object has no attribute '_meta'

Ich habe auch einige Lösungen für Stackoverflow ausprobiert, aber ich habe Fehler während der Serialisierung erhalten

Erste Methode

from rest_framework.renderers import JSONRenderer
uinfo = Userinfo.objects.filter(userId=1).select_related('userId')
response = JSONRenderer().render(uinfo)

und der Typ () von uinfo ist

<class 'django.db.models.query.QuerySet'>

Error:

TypeError: [<Userinfo: Userinfo object>] is not JSON serializable

Zweite Methode:

from rest_framework.renderers import JSONRenderer
uinfo = Userinfo.objects.filter(userId=1).values('userImg', 'city', 'says', 'userId__username', 'userId__first_name')
response = JSONRenderer().render(uinfo)

und der zurückgegebene Typ () von uinfo ist class

<'django.db.models.query.ValuesQuerySet>

Error:

TypeError: [{'userImg': u'profile_img.png', 'city': u'mycity', 'says' : u'Hi, its me' 'userId__username': u'user1', 'userId__first_name': u'user'}] is not JSON serializable   

Ich habe auch versucht, das Abfrageergebnis in ein Diktat umzuwandeln (mithttps://djangosnippets.org/snippets/2670/ ) vor der Serialisierung in JSON, aber ich habe den folgenden Fehler

uinfo = Userinfo.objects.filter(userId=1).select_related('userId')
uinfodata = deep_dump_instance(uinfo)

Error:

in deep_dump_instance
   if (instance.__class__, instance.pk) in seen:
AttributeError: 'QuerySet' object has no attribute 'pk'

Antworten auf die Frage(1)

Ihre Antwort auf die Frage