2016-05-26 30 views
0

我有兩個模型..討論延伸GenericModel。如何從父對象模型中的字符串序列化 - Django休息框架

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. 

我該怎麼做,或者有什麼更好的方法來解決這個問題?

回答

0

嗯,這是一個HyperlinkedModelSerializer和您的序列化器將嘗試解析您的Discussion上相關的GenericModel的URL。

我相信一個解決方案是在DiscussionSerializer/DiscussionListSerializer上定義GenericModel字段來使用它(同時定義GenericModel序列化器)。這樣做比嘗試解決模型中沒有包含的東西的URL更好。有關處理嵌套對象的序列化程序,請參閱docs

相關問題