【发布时间】:2023-04-08 08:49:01
【问题描述】:
我有两个相关模型(事件 + 位置),序列化器如下所示:
class Locations
title = models.CharField(max_length=250)
address = model.CharField(max_length=250)
class Events
title = models.CharField(max_length=250)
locations = models.ForeignKey(Locations, related_name='events'
class EventsSerializer(serializers.ModelSerializer):
class Meta:
model = Events
depth = 1
我在序列化程序中将深度设置为 1,因此我可以从 Locations 模型而不是单个 id 获取信息。但是,这样做时,我无法发布带有位置信息的事件。我只能执行带有标题属性的帖子。如果我删除序列化程序中的深度选项,我可以使用标题和位置 ID 执行帖子。
我尝试创建第二个序列化程序 (EventsSerialzerB) 没有深度场,目的是使用第一个作为只读响应,但是当我创建第二个序列化程序、视图集并将其添加到路由器时,它将自动覆盖原始视图集。
我是否可以创建一个输出相关模型字段的序列化程序,并允许您直接发布到单个模型?
// 编辑 - 这是我要发布的内容
$scope.doClick = function (event) {
var test_data = {
title: 'Event Test',
content: 'Some test content here',
location: 2,
date: '2014-12-16T11:00:00Z'
}
// $resource.save() doesn't work?
$http.post('/api/events/', test_data).
success(function(data, status, headers, config) {
console.log('sucess', status);
}).
error(function(data, status, headers, config) {
console.log('error', status);
});
}
所以当序列化器是扁平的时,我可以发布所有这些字段。 location 字段是相关 Locations 表中位置的 ID。当它们嵌套时,我无法在测试数据中包含位置字段。
【问题讨论】:
-
什么版本的 Django REST 框架?
-
我使用的是 3.0 版
-
当然,我更新了上面的问题
-
我能够通过使用 2 个不同的序列化程序来解决这个问题,一个代表获取请求的嵌套视图,另一个代表发布请求的平面视图,如下所示:stackoverflow.com/questions/22616973/…
标签: python django django-rest-framework