Python 如何在注册表中添加图像上传选项?
我的forms.py就是这个Python 如何在注册表中添加图像上传选项?,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,我的forms.py就是这个 from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm,UserChangeForm class RegistrationForm(UserCreationForm): email= forms.EmailField(required = True) cla
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
class RegistrationForm(UserCreationForm):
email= forms.EmailField(required = True)
class Meta:
model = User
fields = {
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
}
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
if commit:
user.save()
而且,我必须为用户添加上载图像选项,以便用户可以从任何文件上载图像并将其加载到配置文件中。您必须使用字段profile_image=models.FileField扩展您的用户模型 比你要加的还要多
class RegistrationForm(UserCreationForm):
email= forms.EmailField(required = True)
profile_image = forms.FileField() # add this field
...
def save(self, commit=True):
...
user.profile_image = self.cleaned_data.get('profile_image')
...
并将enctype=multipart/formdata属性添加到html模板中的标记中。这里是Django docs上的教程
编辑
在不更改实际用户模型的情况下,以最基本的方式扩展用户模型,就是创建与用户模型具有一对一关系的新模型
from django.conf import settings
class Profile(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
profile_image = models.FileField() # where is stored the user profile image
这是每个用户的配置文件。创建用户时,您必须创建配置文件,因此:
将此代码放在any models.py或使用django启动时加载的文件中
from django.contrib import auth
auth.models.User.add_to_class('create_profile', create_profile)
然后创建下面的方法
from (appname).models import Profile
def create_profile(self, **kwargs):
Profile.objects.create(
user=self,
**kwargs # you can pass other fields values upon creating
)
然后像我之前写的那样修改注册表单并修改save函数
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
# user has to be saved to add profile
user.save()
user.create_profile()
user.profile_img = self.cleaned_data.get('profile_image')
user.profile.save()
if commit:
user.save()
同样,当您使用request.POST实例化注册表单时,也可以这样做
form = RegistrationForm(request.POST, request.FILES)
# to the files have to be passed also, they are not in request.POST
if form.is_valid():
form.save()
就是这样。你能帮我完成用字段profile扩展用户模型的完整过程吗?\u image=models.FileField我拿不到那些教程。我会更新我的答案,几分钟后再查看。