【发布时间】:2018-07-23 04:47:58
【问题描述】:
我有 2 个模型 Task 和 TaskImage,这是属于 Task 对象的图像集合。
我想要的是能够将多个图像添加到我的Task 对象,但我只能使用 2 个模型来完成。目前,当我添加图像时,它不允许我上传它们并保存新对象。
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
serializers.py
class TaskImageSerializer(serializers.ModelSerializer):
class Meta:
model = TaskImage
fields = ('image',)
class TaskSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
images = TaskImageSerializer(source='image_set', many=True, read_only=True)
class Meta:
model = Task
fields = '__all__'
def create(self, validated_data):
images_data = validated_data.pop('images')
task = Task.objects.create(**validated_data)
for image_data in images_data:
TaskImage.objects.create(task=task, **image_data)
return task
models.py
class Task(models.Model):
title = models.CharField(max_length=100, blank=False)
user = models.ForeignKey(User)
def save(self, *args, **kwargs):
super(Task, self).save(*args, **kwargs)
class TaskImage(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE)
image = models.FileField(blank=True)
但是,当我发出帖子请求时:
我得到以下回溯:
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/django/core/handlers/exception.py” 在内部 41. response = get_response(request)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/django/core/handlers/base.py” 在 _get_response 187. response = self.process_exception_by_middleware(e, request)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/django/core/handlers/base.py” 在 _get_response 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/django/views/decorators/csrf.py” 在wrapped_view 58. return view_func(*args, **kwargs)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/viewsets.py” 在视野中 95. return self.dispatch(request, *args, **kwargs)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/views.py” 在调度中 494. 响应 = self.handle_exception(exc)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/views.py” 在句柄异常中 454. self.raise_uncaught_exception(exc)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/views.py” 在调度中 491. 响应 = 处理程序(请求,*args,**kwargs)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/mixins.py” 在创建 21. self.perform_create(序列化器)
文件“/Users/gr/Desktop/PycharmProjects/godo/api/views.py”在 perform_create 152. serializer.save(user=self.request.user)
文件 “/Applications/Anaconda/anaconda/envs/godo/lib/python3.6/site-packages/rest_framework/serializers.py” 在保存 214. self.instance = self.create(validated_data)
文件“/Users/gr/Desktop/PycharmProjects/godo/api/serializers.py”在 创建 67. images_data = 已验证_data.pop('images')
异常类型:KeyError at /api/tasks/ 异常值:'images'
【问题讨论】:
标签: python django serialization django-rest-framework