如何解决只能从admin从Django 3.1应用程序将图像上传到AWS S3,而不能从我的CustomUser应用程序将图像上传到AWS S3
我可以从localhost从Django管理员上传用户的图像,但不能从User应用程序上传图像。我创建了一个自定义用户,以便可以将电子邮件用作用户名(不确定是否与此相关)。
我也尝试设置AWS_S3_SIGNATURE_VERSION ='s3v4',但这也不起作用。
使用Profile模型添加与CustomUser相关的图像,该模型与CustomUser模型具有一对一的关联。
我很困惑为什么它可以从Django admin而不是实际的应用程序本身运行。
任何帮助将不胜感激。我也是Django的新手。
以下是相关文件中的片段:
settings.py
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_REGION_NAME = 'ap-southeast-2'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
forms.py:
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
from django import forms
from .models import CustomUser,Profile
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = ('email',)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = ('email','first_name','last_name',)
class ProfileChangeForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['image',]
models.py:
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_('email address'),unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
class Profile(models.Model):
user = models.OneToOneField(CustomUser,on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg',upload_to='profile_pics')
def __str__(self):
return f'{self.user.email} Profile'
views.py:
@login_required
def profile(request):
if request.method == 'POST':
u_form = CustomUserChangeForm(request.POST,instance=request.user)
p_form = ProfileChangeForm(request.POST,request.FILES,instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request,f'Your account has been updated.')
return redirect('profile')
else:
u_form = CustomUserChangeForm(instance=request.user)
p_form = ProfileChangeForm(instance=request.user.profile)
context = {
'u_form': u_form,'p_form': p_form
}
return render(request,'users/profile.html',context)
解决方法
我不敢相信解决方案是多么微不足道。在我的上传模板中,我将{i}留在了enctype="multipart/form-data
问题解决了!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。