gpt4 book ai didi

python - 为什么 django-badges 在满足标准时不授予徽章?

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:50 24 4
gpt4 key购买 nike

我正在尝试在我的项目中实现 django-badges,并且我正在尝试为填写个人资料字段授予自传徽章,但从未授予任何徽章(已确认,因为数据库中未创建任何内容)。但是,如果我创建一个 View ,使用 get_progress() 或 get_progress_percentage() 返回用户的徽章进度,则表明满足了所需的条件。例如,我的测试 View 如下所示:

#views.py
def badges(request, name):
user = get_object_or_404(User, username=name)
badge = Badge.objects.get(id='autobiographer')
progress = badge.meta_badge.get_progress(user)
progress_percentage = badge.meta_badge.get_progress_percentage(user)
return render('badges.html', {'badge': badge, 'progress': progress, 'progress_percent': progress_percent}, request=request)

#badge_template.html
{{ progress }}
<br />
{{ progress_percent }}

#meta_badges.py
class Autobiographer(badges.MetaBadge):
id = "autobiographer"
model = BaseProfile
one_time_only = True

title = "Autobiographer"
description = "Completed 5 User Profile Fields"
level = "1"

progress_start = 0
progress_finish = 5

def get_user(self, instance):
return instance.user

def get_progress(self, user):
has_avatar = 1 if user.get_profile().avatar else 0
has_city = 1 if user.get_profile().city else 0
has_twitter = 1 if user.get_profile().twitter else 0
has_facebook = 1 if user.get_profile().facebook else 0
has_linkedin = 1 if user.get_profile().linkedin else 0
has_google_plus = 1 if user.get_profile().google_plus else 0
has_tumblr = 1 if user.get_profile().tumblr else 0
return has_avatar + has_city + has_twitter + has_facebook + has_linkedin + has_google_plus + has_tumblr

def check_avatar(self, instance):
return instance.user.get_profile().avatar

def check_city(self, instance):
return instance.user.get_profile().city

def check_twitter(self, instance):
return instance.user.get_profile().twitter

def check_facebook(self, instance):
return instance.user.get_profile().facebook

def check_linkedin(self, instance):
return instance.user.get_profile().linkedin

def check_tumblr(self, instance):
return instance.user.get_profile().tumblr

def check_google_plus(self, instance):
return instance.user.get_profile().google_plus

如果 user1 填写了 5 个个人资料字段,则 example.com/badges/user1 如下所示:

5
100

有人成功使用 django-badges 并知道我缺少什么,或者是否有其他有效的徽章解决方案?它看起来很容易使用,但我无法让它工作。

最佳答案

不知道您是否仍在使用 django-badges 或者仍然遇到这个问题,因为该帖子已经发布了一个月。我也在我的项目中使用 django-badges 并且运行良好。

我认为您代码中的问题在于您混合了两个概念:进度数据和赢得徽章的真正标准。仅当您的一位用户填写了徽章所需的全部七个个人资料字段时,该应用程序才会授予他奖励。另一方面,进度仅评估已填充的五个字段。

您可以实现一个类似于 get_progress 的单一检查方法,如果已填充五个或更多字段,则返回 True:

    def check_fields(self, instance):
has_avatar = 1 if instance.user.get_profile().avatar else 0
has_city = 1 if instance.user.get_profile().city else 0
has_twitter = 1 if instance.user.get_profile().twitter else 0
has_facebook = 1 if instance.user.get_profile().facebook else 0
has_linkedin = 1 if instance.user.get_profile().linkedin else 0
has_google_plus = 1 if instance.user.get_profile().google_plus else 0
has_tumblr = 1 if instance.user.get_profile().tumblr else 0
fields_filled = has_avatar + has_city + has_twitter + has_facebook + has_linkedin + has_google_plus + has_tumblr
return fields_filled >= 5

希望这有帮助!

关于python - 为什么 django-badges 在满足标准时不授予徽章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14733878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com