добавление значков пользователю для выполнения задач в Django - PullRequest
0 голосов
/ 12 мая 2018

Привет Джангонаутс, Как у всех сегодня, я новичок в Django, поэтому, пожалуйста, простите любые глупые ошибки в логике или коде. У меня есть пользователь, User_Profile и модель сообщений. Я хочу дать пользователю значки за количество постов пользователя постов. Например, если пользователь публикует 3 сообщения, он / она получает значок для начинающего и т. Д. ...

Ниже находится мой профиль пользователя models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_image = models.ImageField(default='', blank=True, null=True)
    badge_image = models.ImageField(default='', blank=True, null=True)#maybe default can be "static/images/beginner_image.jpg" but it does not work 

сообщений models.py

User = get_user_model()
class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    title = models.CharField(max_length=250, unique=True)  
    slug = models.SlugField(allow_unicode=True, unique=True)
    message = models.TextField()

Теперь я хочу добиться чего-то вроде этого:

 user = User.objects.get(username=request.user.username)
    if user.posts.count >= 3 :
             badge_image = '<img src="some image">'# I don't know how to make a image variable in views and models. I know how to use it in Django templates with {{image.url}}   
    elif user.posts.count >= 20 :
             badge_image = '<img src="some image">'
    else:
         badge_image ='<img src="beginner_image">'

Где я могу написать этот код в моделях, в представлениях? Прошу прощения, если мои вопросы слишком просты. Ни у одного из изученных мною проектов не было аналогичного сценария

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете сделать это без ImageField. Для этого используйте модель @property. Вам необходимо скопировать изображения значков (например, badge_img1.jpg, badge_img2.jpg и т. Д.) В директорию со статическими файлами (см. Документацию о том, как управлять статическим с помощью Django ). Перепишите Profile как это:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_image = models.ImageField(default='', blank=True, null=True)

    @property
    def badge_image(self):
        if self.user.posts.count() >= 20:
             badge_image = 'badge_img1.jpg'# I don't know how to make a image variable in views and models. I know how to use it in Django templates with {{image.url}}   
        elif self.user.posts.count() >= 3:
             badge_image = 'badge_img2.jpg'
        else:
             badge_image ='badge_img3.jpg'
        return badge_image

Вы можете отобразить изображение текущего пользователя следующим образом:

{% load static %}
<img src={% static user.profile.badge_image %}>
...