向用户添加徽章以在 Django 中执行任务

Mar*_*chi 0 python django django-templates django-models django-views

嗨 Djangonauts,今天大家好吗,我是 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 
Run Code Online (Sandbox Code Playgroud)

帖子模型.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()
Run Code Online (Sandbox Code Playgroud)

现在我想实现这样的目标:

 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">'
Run Code Online (Sandbox Code Playgroud)

我应该在模型和视图中的何处编写此代码?如果我的问题太基本,我很抱歉。我学到的所有项目都没有类似的场景

nev*_*ner 6

你可以不用ImageField. @property为此使用模型。您需要使用静态文件将徽章图像(例如badge_img1.jpgbadge_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
Run Code Online (Sandbox Code Playgroud)

您可以像这样显示当前用户的图像:

{% load static %}
<img src={% static user.profile.badge_image %}>
Run Code Online (Sandbox Code Playgroud)