2013-02-06 26 views
1

我試圖在我的項目中實現django徽章,並且我正在嘗試頒發簽名者徽章來填寫個人資料字段,但沒有頒發任何徽章(因爲沒有在數據庫中創建任何徽章)。但是,如果我使用get_progress()或get_progress_percentage()創建一個可以返回用戶徽章進度的視圖,則表明滿足了所需的條件。例如,我的測試圖如下所示:爲什麼django-badges在符合標準時會頒發徽章?

#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的徽章知道我錯過了什麼,還是有另一種徽章解決方案可行?它似乎很容易使用,但我無法讓它工作。

+0

任何人甚至有建議嘗試的東西?不管它是否工作,只需要別的東西來嘗試,即使你自己從來沒有真正使用過django徽章。從外觀來看,並不是很多人擁有。 – GetItDone

回答

1

不知道你是否還在使用Django徽章或仍然有這個問題,因爲該職位是一個月大。我在我的項目中也使用django徽章,並且工作正常。

我認爲你的代碼中的問題是你混合了兩個概念,進度數據和真正的標準來贏得徽章。如果他填寫徽章所需的七個配置文件字段,該應用只會授予您的一位用戶。另一方面,進展只評估填補了五個領域。

您可以實現,看起來就像一個get_progress,返回真,如果五個或更多的領域被填單檢查方法:

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 

希望這有助於!

+0

我很感激!與往常一樣,事實證明我犯了一個愚蠢的錯誤和過於複雜的事情。爲了完成其他需要完成的事情,我放下徽章休息一下,現在我終於回到了它,它工作。非常感謝您的幫助! – GetItDone

相關問題