Django REST框架及相关模型(带一个字段)

Django REST框架及相关模型(带一个字段),django,django-rest-framework,Django,Django Rest Framework,我想为以下模型创建一个简单的REST API: 我有一个名为Product的主要实体,其中包含一些字段:名称、价格。。。 我还有一个相关的实体,叫做关键字,只有一个字段:关键字 每个产品可以有一个或多个关键字 我可以轻松地将其转换为两种django模型: 类产品(models.Model): name=models.CharField(“产品名称”,最大长度=100) description=models.TextField(“产品说明”) price=models.IntegerField(“

我想为以下模型创建一个简单的REST API:

我有一个名为Product的主要实体,其中包含一些字段:名称、价格。。。 我还有一个相关的实体,叫做关键字,只有一个字段:关键字

每个产品可以有一个或多个关键字

我可以轻松地将其转换为两种django模型:

类产品(models.Model):
name=models.CharField(“产品名称”,最大长度=100)
description=models.TextField(“产品说明”)
price=models.IntegerField(“产品价格”)
received_at=models.DateField(“received at”)
类关键字(models.Model):
关键字=models.CharField(最大长度=50)
产品=型号。外键(产品,相关_name=“关键字”)
但我对序列化程序迷茫了

我想用这样一个简单的动词来创建:

POST /products
{
  "name": "My product name",
  "description": "My product description",
  "price": 40,
  "received_at": "2015-12-1",
  "keywords": ["keyword1", "keyword2"]
}
和通用列表所有、列表一、更新和删除:

GET /products
[{"name": "Product 1"...}, {"name": "Product 2"...}]

GET /products/1
{"name": "Product 1", "description": ...}

PUT /products/1
{
  "name": "My product name",
  "description": "My product description",
  "price": 40,
  "received_at": "2015-12-1",
  "keywords": ["keyword2"]
}

DELETE /products/1
问题是如何管理关键字。 创建新产品时,将创建所有关键字 当产品更新时,我必须检查哪些关键字是新闻,哪些关键字已被删除

此外,我希望我的API在不久的将来可以扩展为更多的关系,如“关键字关系”与一个简单的字符串字段


有什么想法吗?

尝试将基础关键字作为。然后,您可以简单地使用每个新关键字调用
add
方法,集合将根据集合的工作性质保持其唯一的分组

a = set()
a.add('keyword1')
a.add('keyword2')
a.add('keyword1')
print(a)
输出:

set(['keyword1', 'keyword2'])

由于您希望将关键字与产品一起发布,因此必须手动编写逻辑。DRF现在不支持嵌套关系的POST请求,AFAIK。是的,集合是一个不错的选择。但是,更新请求包含的关键字可能少于存储的关键字。我可以使用set(validated_data.get('keywords'))-set(instance.keywords)来获取新关键字,使用set(instance.keywords)-set(validated_data.get('keywords'))来获取删除的关键字。有没有更清洁的解决方案?