2016-05-26 11 views
0

私は2つのモデルを持っています。DiscussionはGenericModelを継承しています。シリアライザの親オブジェクトモデルからフィールドを取得する方法 - django rest framework

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' を置けば、COMMON_FIELDSリストに、 'content_object' 'をOBJECT_ID'アプリケーションは私にこのエラーを返します:

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/DiscussionListSerializerGenericModelフィールドを定義することを考えています(GenericModelシリアライザも定義しています)。モデルに含まれていないもののURLを解決しようとするよりも良いでしょう。そのためにネストされたオブジェクトを扱う場合は、シリアライザdocsを参照してください。

関連する問題