繁体   English   中英

如何在序列化器中从父对象模型获取字段-Django Rest Framework

[英]How to get fields from parent object model in serializer - django rest framework

我有两个模型。讨论扩展GenericModel。

class GenericModel(models.Model):

content_type = models.ForeignKey(
    ContentType,
    on_delete=models.CASCADE
)

object_id = models.PositiveIntegerField()

content_object = GenericForeignKey('content_type', 'object_id')

class Meta:
    abstract = True

class Discussion(GenericModel):

author = models.ForeignKey(
    'auth.User'
)

name = models.CharField(
    max_length=200
)

description = models.TextField()

created_data = models.DateTimeField(
    default=timezone.now
)

comments = models.ManyToManyField(
    'discussions.Comment',
    default='',
    blank=True,
    related_name='discussion_comments'
)

is_closed = models.BooleanField(
    default=False
)

visits = models.IntegerField(
    default=0
)

def __str__(self):
    return self.name

COMMON_FIELDS = (
'pk',
'author',
'name',
'description',
'created_data',
'comments',
'is_closed',
'visits'
)


class DiscussionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
    model = Discussion
    fields = COMMON_FIELDS


class DiscussionListSerializer(serializers.HyperlinkedModelSerializer):
comments = CommentSerializer(many=True)

class Meta:
    model = Discussion
    fields = COMMON_FIELDS

所以..如果我将“ content_type”,“ object_id”,“ content_object”放在COMMON_FIELDS列表中,则应用程序将向我返回此错误:

Could not resolve URL for hyperlinked relationship using view name "contenttype-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.

我该怎么办,或者解决此问题的更好方法是什么?

好吧,这是一个HyperlinkedModelSerializer ,您的序列化程序将尝试在您的Discussion上解析相关GenericModel的URL。

我相信一种解决方案是在您的DiscussionSerializer/DiscussionListSerializer上定义GenericModel字段以使用它(也定义GenericModel序列化器)。 这比尝试为模型中未包含的内容解析URL更好。 请参阅有关处理嵌套对象的序列化器文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM