python - 如何在 django 上禁用自动文件上传?
问题描述
嗨,我有一个名为 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
解决方案
我的代码在哪里将文件上传到我的 Django 项目?
这不应该与您的 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”都可以交换到您希望存储文件的任何位置。
从我的firebase存储中存储路径但是每次我上传我的文件django都会生成一个新文件
Django 从不生成新文件。文件系统中显示的文件是您上传的文件。如果您是客户,您将不会看到这一点,因为您上传的所有文件都以一种或另一种方式发送到您的主机。
您不能只存储路径,因为如果文件被移动或删除应该怎么办?
推荐阅读
- java - 如何使用 RestTemplate 通过请求正文进行 POST 调用
- javascript - 如何冻结 Javascript 超时和 BS4/jQuery 动画?
- java - Java中的Selenium Chromedriver屏幕截图与一组分辨率不同
- html - 如何在不滚动的情况下将 flex 容器全部保存在一页中
- javascript - 如何在 Rails 中实现无限滚动
- angular - Control bound to a model shows old value on certain keys despite get property() working in Angular
- javascript - How to access value under a node with firebase functions
- reactjs - 之间的区别
和组件() - opengl - 具有 PBO 的深度值的非阻塞 glReadPixels
- c - 如何使用循环访问矩阵的元素