【发布时间】:2016-10-22 04:16:35
【问题描述】:
我正在构建一个活动模型,有点类似于package。它有一个演员、动词和目标。
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)
现在,无论何时创建任何模型(Tender、Job 和 News)的新对象,都会创建一个新的 Activity 对象,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,它可以是这三个模型(News/Job/Tender)中的任何一个。
如何为 ContentType 对象创建一个序列化程序(例如 TargetSerialier 类),以便可以在 ActivitySerializer 类字段中使用 target?
【问题讨论】:
标签: django django-rest-framework django-contenttypes