Django Rest Framework ModelSerializer 外键如何插入数据?
一个简单的多对多表,实现版本+版本文件的逻辑。
单层的ModelSerializer 写起来非常容易,直接传入序列器然后save就行了。但是带外键的字段是需要怎么处理呢?
如果把创建版本和提交文件,分成2个接口,处理应该会方便些。但是效率不高。我想一次post就全解决、
import json
import requests
url = 'http://127.0.0.1:8000/api/version'
file_data = [{"filename": "asd", "md5": "asdasd"}, {"filename": "asd2", "md5": "asdasd2"}]
fff = json.dumps(file_data)
params = {
"version_str": "0.0.0.1",
"files": fff,
}
req = requests.post(url, data=params)
print(req.json())
view
def post(self, request):
serial = api.serializer.VersionSerializer(data=request.data)
if serial.is_valid():
serial.save()
return Response("ok", status=status.HTTP_201_CREATED)
else:
return Response(serial.error_messages, status=status.HTTP_400_BAD_REQUEST)
model
class FileModel(models.Model):
filename = models.CharField(max_length=255, verbose_name='路径和文件名')
md5 = models.CharField(max_length=255, verbose_name='MD5')
class VersionModel(models.Model):
version_str = models.CharField('版本', max_length=8, help_text='string 版本号')
files = models.ManyToManyField(FileModel, related_name="file_list")
serializer
class VersionSerializer(ModelSerializer):
file_list = FileSerializer(many=True)
class Meta:
model = api.models.VersionModel
fields = ('version_str', 'files')
def create(self, validated_data):
return api.models.VersionModel.objects.create(**validated_data)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
DRF本身很灵活,应该还有其他方法。
额..你不是已经加入了吗.
file_list = FileSerializer(many=True)