[英]How to save a random item returned from QuerySet. Django, Python
[英]Django: How to return a field from a ForeignKey model through filter queryset. As it throws not JSON Serializable
我想从Contet
model 返回一个字段,它是Saved
model 的 ForeignKey 字段。 我正在使用filter
查询集,因为它返回多个值。 但是,问题是我无法在Saved.objects.filter(user=self.request.user)
之后使用content.slug
从Content
model 返回slug
字段!
内容 model:
class Content(models.Model):
title = models.CharField(max_length=200, blank=False)
slug = models.CharField(max_length=200, blank=False)
...
我保存的 model:
class Saved(models.Model):
content = models.ForeignKey('Content', on_delete=models.SET_NULL)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
...
我的观点:
class SavedList(viewsets.ModelViewset):
serializer_class = SavedSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Saved.objects.filter(user=self.request.user)
def list(self, request):
savedList = []
for i in self.get_queryset():
dict = {
'slug': i.content.slug, # i want this
'content': i.content,
'user': i.user
}
savedList.append(dict)
return Response(savedList)
当我运行它时,它返回Object of type 'Content' is not JSON Serializable
!
如何从Content
model 中获取slug
?
该错误是因为您的def list()
中的i
是 class Content
的 object 。
您可以通过创建嵌套序列化程序来实现它,如下所示。 可能您不需要def list()
方法。
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = settings.AUTH_USER_MODEL
fields = '__all__' # provide the list fields from `settings.AUTH_USER_MODEL` to include in nested object.
class ContentSerializer(serializers.ModelSerializer):
class Meta:
model = Content
fields = '__all__' # provide the list fields from `Content ` to include in nested object.
class SavedSerializer(serializers.ModelSerializer):
content = ContentSerializer(many=True) # this will create a nested object.
user = UserSerializer(many=True) # this will create a nested object.
class Meta:
model = Saved
fields = ['content', 'user'] # you can add more fields of `Saved` model.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.