我正在尝试关注this帖子,将个人资料图片与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
这背后的逻辑是添加一张图片,然后设置一个bool标志,告诉模板是否显示一般的“空白用户”头像,如果没有与该配置文件关联的图片,并显示一个缩略图,如果其中有一个头像属性用户。
从我的表单中,上传和has_picture
字段都没有设置。但是,在管理员中,我可以上传照片。
我做错了什么?
答案 0 :(得分:1)
设置一个布尔值来检查用户是否拥有头像并不是一个好主意。您有两种选择:您可以在模板中使用空网址,或者在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
调用保存方法。