我正在尝试在我的项目中实现django-badges,并且我正在尝试授予Autobiographer徽章以填写配置文件字段,但是没有颁发徽章(确认因为数据库中没有创建任何内容)。但是,如果我使用get_progress()或get_progress_percentage()创建一个可以返回用户徽章进度的视图,则表明符合所需的条件。例如,我的测试视图如下所示:
#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并知道我缺少什么,或者是否有其他徽章解决方案有效?这似乎很容易使用,但我无法让它工作。
答案 0 :(得分:1)
不知道你是否还在使用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
希望这有帮助!