将个人资料图片添加到 django 用户



我正在尝试按照这篇文章将个人资料图片与 Django 中的用户相关联。

我有以下型号

class MyUser(AbstractBaseUser):
    """
    Custom user class.
    """
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    email = models.EmailField('email address', unique=True, db_index=True)
    is_staff = models.BooleanField('is staff', default=False)
    first_name = models.TextField('first name', default=None, null=True)
    last_name = models.TextField('last name', default=None, null=True)
    date_of_birth = models.DateField('date of birth', null=True)
    avatar = models.ImageField('profile picture', upload_to='static/media/images/avatars/', null=True, blank=True)
    has_picture = models.BooleanField('has profile picture', default=False)
    adult = models.BooleanField('is adult', default=False)
    gender = models.CharField('gender', max_length=1, choices=GENDER_CHOICES)
    objects = MyUserManager()
    REQUIRED_FIELDS = ['date_of_birth', 'gender']
    USERNAME_FIELD = 'email'
    # Insert a lot of methods here
    def set_avatar(self):
       self.has_picture = True

我使用了帖子中的表单,但将其添加到我的 ChangeForm 的 save() 中:

def save(self, commit=True):
    user = super(MyChangeForm, self).save(commit=False)
    if user.avatar:          # If the form includes an avatar
       user.set_avatar()     # Use this bool to check in templates
    if commit:
        user.save()
    return user

这背后的逻辑是添加图片,然后设置一个布尔标志,以告知模板如果没有与配置文件关联的图片,是否显示通用的"空白用户"头像,如果用户中有头像属性,则显示缩略图。

从我的表单中,上传和has_picture字段都没有设置。但是,在管理员中,我可以上传照片。

我做错了什么?

设置

布尔值来检查用户是否有头像不是好主意。您有两种选择:您可以使用模板中的空 url 或定义一种方法来设置用户头像models.py

选项 1:在模板中

{% if user.avatar == None %}
    <img src="DEFAULT_IMAGE" />
{% else %}
    <img src="user.avatar"/>
{% endif %}

选项 2:在您的模型中

def set_avatar(self):
    _avatar = self.avatar
    if not _avatar:
        self.avatar="path/to/default/avatar.png"

此外,如果您的用户从未被保存,如果您正在使用 commit=False 调用保存方法。

最新更新