如何在Django上禁用自动文件上载?

2024-10-02 06:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我有一个名为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

Tags: djangoinstancefromimporttruedatagetmodels
2条回答

where is my code uploading the file to my Django project?

这不应该随settings.py一起提供,但可以安全地添加以下内容:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'media'),
]

FILE_UPLOAD_TEMP_DIR = os.path.join(BASE_DIR, 'tmp')
  • 媒体根目录设置只是保存用户上载文件的目录的文件路径
  • Staticfiles_dirs是上载文件将存储在本地计算机中的位置
  • Temp_dir是一个保存部分上传的目录(文件的某些部分可能在其他部分之前通过)

事实上,在我上面提供的代码中,“media”和“tmp”都可以在您希望存储文件的任何位置进行交换

Documentation

store the path from my firebase storage but every time that I upload my file django generates a new file

Django从不生成新文件。文件系统中显示的文件就是您上载的文件。如果你是一个客户,你不会看到这一点,因为你上传的所有文件都会以这样或那样的方式传到你的主机上

您不能只存储路径,因为如果文件被移动或删除,应该怎么做

我认为您的文件是在创建时创建的,所以您只需要取消设置值,如果不是这样,请更正我

def create(self, validated_data):
        """
        """
        user_data = validated_data.pop('user')
        user_data.pop('foto')
        user = UserSerializer.create(UserSerializer(), validated_data=user_data)
        empleado = Empleado.objects.create(user=user,**validated_data)
        return empleado

相关问题 更多 >

    热门问题