Django Rest设置外键值

时间:2016-10-26 06:06:56

标签: python django django-models django-rest-framework

我为用户提供了一个警报系统。用户可以订阅类别,并根据我将生成警报。

我已将模型定义为此类警报。

class City(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name


class Area(models.Model):
    name = models.CharField(max_length=25)
    city = models.ForeignKey(City)

    def __unicode__(self):
        return self.name


class Category(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name


class SubscribeAlert(models.Model):
    category = models.ForeignKey(Category)
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    status = models.BooleanField(default=False)
    attributes = JSONField('Subscriptions', null=True, blank=True)


class SubscribeLocation(models.Model):
    subscribe = models.ForeignKey(SubscribeAlert)
    area = models.ForeignKey(Area)

用户可以选择类别并为通知选择多个区域。 这是我的模型结构对于这种情况是否正常?

我如何定义其余的ModelSerializer同时插入SubscribeAlert和许多SubscribeLocation。?

class NotifyCreateSerializer(ModelSerializer):
    class Meta:
        model = SubscribeAlert

如何扩展此功能以创建订阅?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要使用nested serializers。这是示例(可能不起作用)

class SubscribeLocationSerializer(ModelSerializer):
    class Meta:
        model = SubscribeLocation

class NotifyCreateSerializer(ModelSerializer):
    subscribelocation_set = SubscribeLocationSerializer(many=True)
    class Meta:
        model = SubscribeAlert
        fields = ('category', 'user', 'status', 'attributes',
                  'subscribelocation_set')