您好,我有一个名为foto的列,我使用这个列存储来自firebase存储的路径,因此我不需要django存储,但每次上载文件时,django都会生成一个新文件
from django.db import models
from users.models import User
class Empleado(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
fecha_contratacion = models.DateField(null=True,blank=True)
fecha_nacimiento = models.DateField(null=True,blank=True)
curp = models.CharField(unique=True, max_length=200)
rfc = models.CharField(unique=True, max_length=200)
telefono = models.CharField(max_length=200)
foto = models.ImageField(blank=True, null=True, upload_to='fotos/')
我也有一个django rest框架序列化程序,我的代码在哪里将文件上传到django项目
from rest_framework import serializers
from .models import Empleado
from django.core import serializers as django_serializers
from users.serializers import UserSerializer, User
from .firebase import Firebase
class EmpleadoSerializer(serializers.ModelSerializer):
"""
Currently unused in preference of the below.
"""
fecha_contratacion = serializers.DateField()
fecha_nacimiento = serializers.DateField()
curp = serializers.CharField(required=True)
rfc = serializers.CharField(required=True)
telefono = serializers.CharField(required=True)
user = UserSerializer(required=False)
foto = serializers.ImageField(required=False)
class Meta:
model = Empleado
fields = ('foto','user_id','user','fecha_contratacion','fecha_nacimiento','curp','rfc','telefono')
def create(self, validated_data):
"""
"""
user_data = validated_data.pop('user')
user = UserSerializer.create(UserSerializer(), validated_data=user_data)
empleado = Empleado.objects.create(user=user,**validated_data)
return empleado
def update(self, instance, validated_data):
if 'user' in validated_data:
user_data = validated_data.pop('user')
user = User.objects.get(id=instance.user_id)
user = UserSerializer.update(UserSerializer(), user, validated_data=user_data)
instance.fecha_contratacion = validated_data.get('fecha_contratacion', instance.fecha_contratacion)
instance.fecha_nacimiento = validated_data.get('fecha_nacimiento', instance.fecha_nacimiento)
instance.curp = validated_data.get('curp', instance.curp)
instance.rfc = validated_data.get('rfc', instance.rfc)
instance.telefono = validated_data.get('telefono', instance.telefono)
if 'foto' in validated_data:
instance.foto = validated_data.get('foto', instance.foto)
instance.save()
firebase = Firebase()
firebase.upload(instance.foto)
else:
instance.save()
return instance
这不应该随settings.py一起提供,但可以安全地添加以下内容:
事实上,在我上面提供的代码中,“media”和“tmp”都可以在您希望存储文件的任何位置进行交换
Documentation
Django从不生成新文件。文件系统中显示的文件就是您上载的文件。如果你是一个客户,你不会看到这一点,因为你上传的所有文件都会以这样或那样的方式传到你的主机上
您不能只存储路径,因为如果文件被移动或删除,应该怎么做
我认为您的文件是在创建时创建的,所以您只需要取消设置值,如果不是这样,请更正我
相关问题 更多 >
编程相关推荐