Ya no tienes que buscar más en otras webs ya que has llegado al sitio justo, poseemos la respuesta que buscas pero sin problema.
Solución:
Debe crear un formulario que tenga un método limpio que valide las propiedades que está buscando:
#models.py
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
avatar = models.ImageField()
#forms.py
from django import forms
from django.core.files.images import get_image_dimensions
from my_app.models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
w, h = get_image_dimensions(avatar)
#validate dimensions
max_width = max_height = 100
if w > max_width or h > max_height:
raise forms.ValidationError(
u'Please use an image that is '
'%s x %s pixels or smaller.' % (max_width, max_height))
#validate content type
main, sub = avatar.content_type.split('/')
if not (main == 'image' and sub in ['jpeg', 'pjpeg', 'gif', 'png']):
raise forms.ValidationError(u'Please use a JPEG, '
'GIF or PNG image.')
#validate file size
if len(avatar) > (20 * 1024):
raise forms.ValidationError(
u'Avatar file size may not exceed 20k.')
except AttributeError:
"""
Handles case when we are updating the user profile
and do not supply a new avatar
"""
pass
return avatar
Espero que te ayude.
Para conectar el modelo de perfil de usuario a su modelo de usuario, asegúrese de extender su modelo de usuario como se explica detalladamente en este tutorial: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending- modelo de usuario/
Esto le permitirá acceder a UserProfile attributes para su Usuario, incluido el avatar, utilizando user.get_profile().avatar. (Tenga en cuenta que la sintaxis es diferente en su plantilla, consulte a continuación cómo mostrar el avatar en su plantilla).
Puede usar un campo de imagen en su modelo de perfil de usuario para el avatar:
#upload at specific location
avatar = models.ImageField(upload_to='images')
Esto funciona exactamente como FileField pero es específico para imágenes y valida que el objeto cargado es una imagen válida. Para limitar el tamaño del archivo, puede usar la respuesta dada aquí por @pastylegs: Tamaño máximo de imagen en la carga de archivos
Luego, asumiendo que su modelo de perfil de usuario se llama UserProfile, accede al avatar en su plantilla de la siguiente manera:
Más sobre el campo de imagen aquí: https://docs.djangoproject.com/en/dev/ref/models/fields/#imagefield
Asumiendo que estás usando estándar contrib.auth
puede designar un modelo como un modelo de ‘perfil de usuario’, a través de AUTH_PROFILE_MODULE
ajuste. Luego puede usarlo para adjuntar cualquier información adicional que desee al User
objetos, por ejemplo
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
avatar = models.ImageField() # or whatever
Sección de Reseñas y Valoraciones
Si te gusta este mundo, puedes dejar un enunciado acerca de qué te ha gustado de este ensayo.