到目前为止,这是Star
ListAPIView。
[
{
"user": 1,
"content_type": 26,
"object_id": 7
},
{
"user": 1,
"content_type": 26,
"object_id": 8
},
{
"user": 1,
"content_type": 15,
"object_id": 5
},
{
"user": 1,
"content_type": 15,
"object_id": 6
}
]
因为数组中第一个对象的content_type是26,所以它的引用对象是“装备”。为了更好地理解,我提供了Star
Model。它包含ContentType和object_id字段。它使用两个字段来引用通用外键。
class Star(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
objects = StarManager()
这里是序列化程序和视图
serializers.py
class ListStarSerializer(serializers.ModelSerializer):
class Meta:
model = Star
fields = ('user', 'content_type', 'object_id')
views.py
class StarListAPIView(generics.ListAPIView):
serializer_class = ListStarSerializer
def get_queryset(self):
qs = Star.objects.filter(user=self.request.user)
return qs
内容类型26和15都有各自的图像字段(分别称为服装img
和布料img
)。为了实现这一点,我想根据内容类型使用不同的序列化程序
例如,如果内容类型为26,则调用OutfightListSerializer。如果content_type为15,则调用ClothListSerializer。
我正在构建这个Star
应用程序有这个链接的帮助(defcreate_comment_serializer)。(https://github.com/codingforentrepreneurs/Blog-API-with-Django-Rest-Framework/blob/master/src/comments/api/serializers.py)。
非常感谢你!
如果我理解你,也许你可以使用序列化方法字段serializers.py
class ListStarSerializer(serializers.ModelSerializer):
img_data = serializers.SerializerMethodField()
class Meta:
model = Star
fields = ('user', 'content_type', 'object_id')
def get_img_data(self, obj):
if obj.content_type_id == 15:
serializer = ClothListSerializer(obj.content_object)
elif obj.content_type_id == 26:
serializer = OutfitListSerializer(obj.content_object)
else:
return {}
return serializer.data
问题内容: 我有一个模型和,就像这样: 现在我有了一些和对象,我想得到一个查询,该查询选择所有指向少于2的对象。 A就像一个池子,用户(B)加入池。如果仅加入1或0,则根本不应该显示该池。 这样的模型设计可能吗?还是我应该修改一下? 问题答案: 听起来像是一份工作。 如果B计数通常是您需要的过滤或排序标准,或者需要显示在列表视图中,则可以考虑通过将b_count字段添加到A模型并在添加B或添加B时
问题内容: 如何枚举所有导入的模块? 例如,我想从以下代码中获取: 问题答案: 仅获取当前模块的所有导入的一种近似方法是检查模块: 这不会返回本地导入或非模块导入(如)。请注意,这将返回,因此,如果您使用的话,将获得原始模块名称。如果要使用别名,则使用yield名称代替。
问题内容: 说我这样创建一个对象: 检索属性名称列表的最佳方法是什么?即我想以一些变量“键”结束: 问题答案: 在现代浏览器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5+)中,您可以使用内置的Object.keys方法: 上面有完整的polyfill,但简化的版本是: 或者替换为,以允许您调用任何对象。扩展原型会产生一些副作用,我不建议您这样做。
问题内容: 如何枚举所有导入的模块? 例如,我想从以下代码中获取: 问题答案: 仅获取当前模块的所有导入的一种近似方法是检查globals()模块: 这不会返回本地导入,也不会返回非模块导入,例如。请注意,这将返回,因此如果你使用的话,将获得原始模块名称;如果你想要别名,则使用名称。
我要提前道歉——我知道这个问题可能已经在其他地方得到了解答,但是我似乎无法找到我需要的答案,也无法设法让我找到的其他代码适应我的需要。 我有一个数据框: 我想生成一个一个和两个之间COUNT值之差的数据帧,每个FILE都有一行,即。 我确信我应该能够相当容易地使用基础R或Plyr做到这一点,但我有点卡住了。任何人都可以建议一个好方法来做到这一点,也许在Plyr上有很好的教程,可能会帮助我解决将来的
问题内容: 如何使entry.category成为CategoryProxy的实例?有关详细信息,请参见代码: 从Category转换为CategoryProxy也是可以的,但是我对ORM内部结构以正确复制内部状态不是很熟悉… 编辑。 原因:我向CategoryProxy添加了方法,并想使用他: 编辑2. 目前,我是这样实现的: 但是看起来很糟糕… 问题答案: 在不访问数据库的情况下从模型类切换到