Загрузка файла DRF из FileField

#django-rest-framework

#django-rest-framework

Вопрос:

Я использовал DRF REST для достижения функции загрузки файлов.

models.py

 class NetworkConfig(models.Model):
    ipaddress = models.GenericIPAddressField(verbose_name='Device IP')
    configfile = models.FileField(max_length=300,upload_to='networkconfig/')
    create_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'NetworkConfig'
        verbose_name_plural = verbose_name
        db_table = 'NetworkConfig'

    def __str__(self):
        return self.ipaddress
  

serializers.py

 class NetworkConfigSerializer(serializers.ModelSerializer):
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')

    class Meta:
        model = NetworkConfig
        fields = '__all__'
  

settings.py

 MEDIA_ROOT = '/tmp/'
  

views.py

 class NetworkFilesViewSet(ViewSet):
    parser_classes = (MultiPartParser, FormParser)

    def upload(self,request):
        file_serializer = NetworkConfigSerializer(data=request.data)
        if file_serializer.is_valid():
            file_serializer.save()
            return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  

urls.py

 path(r'api/networkconfig', views.NetworkFilesViewSet.as_view({'post': 'upload'})),
  

Когда я использовал postman для загрузки файла, таблица MySQL выглядит следующим образом:

 id | ipaddress  | configfile             | create_time                
 1 | 10.12.2.19 | networkconfig/test.txt | 2020-09-09 19:17:58.723851
  

и хранит файл в /tmp/networkconfig/.

Теперь, как я могу загрузить этот файл с помощью REST из FileField?

Комментарии:

1. просто добавьте другой view , который будет выполнять запрос get и в serializer добавить configfile в fields

2. @Bahtiyarbekbergen Не могли бы вы объяснить это более подробно

3. просто верните экземпляр после операции создания со всеми полями, вот и все