如何正确编写需要与复杂对象配合使用的api(检索,创建,更新方法)

时间:2019-04-04 19:33:04

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

我需要提供使用django rest框架通过api处理简单对象列表的功能。

考虑在Django中将postgres用作db,我为此目的使用了ArrayField:

class QA(models.Model):
    name = models.CharField(max_length=1024, blank=True, default='')
    date_created = models.DateTimeField(default=datetime.utcnow)
    questions = postgres_fields.ArrayField(models.CharField(max_length=1024), null=True, blank=True)
    answers = postgres_fields.ArrayField(models.TextField(), null=True, blank=True)

class QASerializer(serializers.ModelSerializer):
    class Meta:
        model = QA
        exclude = ()

对于此代码,我可以使用以下json插入新的QA对象:

{
    "name": "Example",
    "questions": ["123", "456", "789"],
    "answers": ["answer1", "answer2"]
}

解决我的问题就足够了,但是我必须使用ForeignKeyField通过另一个模型来指定依赖对象:

class QA(models.Model):
    name = models.CharField(max_length=1024, blank=True, default='')
    date_created = models.DateTimeField(default=datetime.utcnow)

class Question(models.Model):
    text = models.CharField(max_length=1024)
    qa = models.ForeignKey(QA, on_delete=models.CASCADE)

class Answer(models.Model):
    text = models.CharField(max_length=1024)
    qa = models.ForeignKey(QA, on_delete=models.CASCADE)

在第一种情况下,简单的ModelSerializer是一个很好的解决方案,但是我一直坚持使用ForeignKey将许多对象绑定到一个对象的情况。

django-rest-framework是否提供了一个接口,用于通过简单的json来检索,创建和修补对象,就像我在问题中所写的那样?我应该在视图和序列化器中使用什么基类?为了与简单的json交互而不为每个模型创建另一个api的能力,我应该重载什么方法?

1 个答案:

答案 0 :(得分:1)

许多文章的DRF文档中都回答了您要问的问题,但是您应该开始here进行基本的序列化创建,并开始here来编写嵌套的序列化程序(以创建多个关联实例)。 / p>