Django Imagefield, принимающий все файлы
На моей странице регистрации я могу ввести файл, отличный от изображения, например -.txt или .py, а затем сохранить его. Несмотря на то, что моя модель является Imagefield, она позволяет вводить файлы, отличные от изображений. У меня есть другие модели с imagefield, но они работают нормально. Когда я пытаюсь сохранить файл txt или py, он выдает ошибку. Но на моей странице регистрации он сохраняется напрямую. Я также добавил валидаторы, но все равно не работает. Обратите внимание, что когда я пытаюсь отредактировать пользователя на странице администратора, он выдает ошибку
models.py :
from django.contrib.auth.models import User
from django.core.validators import validate_image_file_extension
from django.db import models
from django.utils import timezone
from multiselectfield import MultiSelectField
# Create your models here.
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, help_text=False)
profile_pic = models.ImageField(upload_to="profile_pic/",validators=[validate_image_file_extension], null=True , blank=True)
def __str__(self):
return self.user.username
views.py
def register(request):
accounts = User.objects.all()
if request.method == "POST":
user_form = UserForm(data=request.POST)
profile_form = UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.is_active = False
user.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
messages.success(request, 'Your account has been created Sucessfully!!!!')
messages.success(request, 'You can use your account after it has been approved by the admins.')
return redirect("/")
else:
messages.error(request, user_form.errors, profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileInfoForm()
return render(request, 'MyTestApp/registration.html', {
'user_form': user_form,
'profile_form': profile_form,
"accounts": accounts}
)
и шаблон :
<div class="jumbotron ">
<form method="post" enctype='multipart/form-data' autocomplete="off">
{%csrf_token%}
<div class="form-group row">
{% if user.is_authenticated %}
<h2>LOGOUT TO CREATE A NEW ACCOUNT </h2>
{% else %}
<h2>Please Register Here: </h2>
</div>
<br>
<div class="form-group row">
<label >{{ user_form.username.label }}</label>
{{ user_form.username }}
{{user_form.username.errors}}
</div>
<div class="form-group row">
<label>{{ user_form.password.label }}</label>
{{ user_form.password }}
{{user_form.password.errors}}
</div>
<div class="form-group row">
<label >{{ user_form.email.label }}</label>
{{ user_form.email }}
{{user_form.email.errors}}
</div>
<div class="form-group row">
<label>Profile Picture: </label>
{{ profile_form.profile_pic }}
{{ profile_form.profile_pic.errors}}
</div>
<br>
<div class="form-group row">
<input type="submit" name="userregister" value="Register" class="btn btn-dark">
</div>
</form>
</div