我正在使用Django Rest Framework和AngularJs上传文件.我的视图文件如下所示:
class ProductList(APIView):
authentication_classes = (authentication.TokenAuthentication,)
def get(self,request):
if request.user.is_authenticated():
userCompanyId = request.user.get_profile().companyId
products = Product.objects.filter(company = userCompanyId)
serializer = ProductSerializer(products,many=True)
return Response(serializer.data)
def post(self,request):
serializer = ProductSerializer(data=request.DATA, files=request.FILES)
if serializer.is_valid():
serializer.save()
return Response(data=request.DATA)
Run Code Online (Sandbox Code Playgroud)
由于post方法的最后一行应该返回所有数据,我有几个问题:
request.FILES?我有2个模型Task,TaskImage它们是属于Task对象的图像集合.
我想要的是能够向我的Task对象添加多个图像,但我只能使用2个模型.目前,当我添加图片时,它不允许我上传它们并保存新对象.
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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, …Run Code Online (Sandbox Code Playgroud) 我想要一个模型,您可以在创建(发布)时上传多个图像。
在帖子表单中 api/animals/ 上的 DRF Web 视图中,我想添加多个图像并创建带有附加图像的新动物。
假设我有以下模型:
class Animal(models.Model):
slug = models.CharField(max_length=20, unique=True)
class AnimalImage(models.Model):
animal = models.ForeignKey(Animal, on_delete=models.CASCADE)
image = models.ImageField(upload_to='animal_pics/')
Run Code Online (Sandbox Code Playgroud)
我有以下序列化器:
class AnimalImageSerializer(serializers.ModelSerializer):
class Meta:
model = AnimalImage
fields = ('animal', 'image', )
class AnimalSerializer(serializers.HyperlinkedModelSerializer):
images = AnimalImageSerializer(many=True)
class Meta:
model = Animal
lookup_field = 'slug'
extra_kwargs = {
{'url': {'lookup_field': 'slug'}
}
fields = ('slug', 'images', )
Run Code Online (Sandbox Code Playgroud)
我还有以下几点看法:
class AnimalViewSet(viewsets.ModelViewSet):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
lookup_filed = 'slug'
parser_classes = (JSONParser, MultiPartParser, FormParser)
Run Code Online (Sandbox Code Playgroud)
当我使用 drf …
django multipartform-data image-uploading django-forms django-rest-framework