model.py
from django.db import models
# Create your models here.
class FileModel(models.Model):
file_name = models.CharField(max_length=50, verbose_name='桶名', help_text='桶名')
file_path = models.CharField(max_length=200, default='', verbose_name='文件路徑', help_text='文件路徑')
file = models.FileField(verbose_name='文件', upload_to='file/%Y%m%d')
create_dt = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='创建时间')
modify_dt = models.DateTimeField(auto_now=True, verbose_name='修改时间', help_text='修改时间')
def __str__(self):
return self.file_name
view.py
class FileViewSet(ModelViewSet):
parser_classes = (MultiPartParser,)#為swagger能夠測試出是上傳文件
queryset = FileModel.objects.all()
serializer_class = FileSerializer
Serializer
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = FileModel
fields = "__all__"
read_only_fields = ('file_name','file_path')
def validate(self, attrs):
getaction = self.context['view'].action
if getaction == 'create':
obj = FileModel.objects.filter(file_name=attrs['file'].name)
if obj:
raise serializers.ValidationError('存在相同文件名')
else:
return attrs
def create(self, validated_data):
validated_data['file_name'] = validated_data['file'].name
return super().create(validated_data)
最後別忘了,setting.py批配置文件媒體和,媒體文件的路由註冊