我正在構建一個活動模型,與此有點類似package。它有一個演員,動詞和目標。ContentType對象的django-rest-framework序列化程序
class Activity(models.Model):
actor_type = models.ForeignKey(ContentType, related_name='actor_type_activities')
actor_id = models.PositiveIntegerField()
actor = GenericForeignKey('actor_type', 'actor_id')
verb = models.CharField(max_length=10)
target_type = models.ForeignKey(ContentType, related_name='target_type_activities')
target_id = models.PositiveIntegerField()
target = GenericForeignKey('target_type', 'target_id')
pub_date = models.DateTimeField(default=timezone.now)
現在,每當創建哪些模型(招標,工作和新聞)的新對象,一個新的活動對象被創建,與target
是任何這三種模式的對象。
eg. user (actor) published (verb) title (target)
class Tender(models.Model):
title = models.CharField(max_length=256)
description = models.TextField()
class Job(models.Model):
title = models.CharField(max_length=256)
qualification = models.CharField(max_length=256)
class News(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
title = models.CharField(max_length=150)
爲了得到這個數據我想提出一個API,它會得到我所需要的JSON數據。我正在使用django-rest-framework來做這件事,而且很新。
class ActorSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
class ActivitySerializer(serializers.HyperlinkedModelSerializer):
actor = ActorSerializer()
class Meta:
model = Activity
fields = ('url', 'actor', 'verb', 'pub_date')
在上面的串行器中,我知道actor
將是User。因此,我使用ActorSerializer
類的用戶模型。但是至於target
,它可以是這三種模式中的任何一種(新聞/工作/招標)。
如何爲ContentType對象製作序列化程序(例如,TargetSerialier
類),以便我可以在ActivitySerializer
類字段中使用target
?
但這是否意味着這些字段現在只讀?如果我想保存一個ActivityObject呢?如果你不給它一個read_only,你必須給它一個查詢集,但我不知道它到達那裏之前會是什麼模型。我誤解了嗎? –