Skip to main content
 首页 » 编程设计

python之“' not supported between instances of ' 方法”和 'method'之Python、Django

2025年05月04日27yyy_WW

<分区>

我正在尝试使用 Winerama 推荐器 Tutorial .我遇到了一个我无法解决的错误。当我尝试转到“推荐列表”选项卡时,浏览器返回以下错误。

错误

Environment: 
 
 
Request Method: GET 
Request URL: http://127.0.0.1:8000/recommendation/ 
 
Django Version: 2.0.7 
Python Version: 3.7.0 
Installed Applications: 
['django.contrib.admin', 
 'django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.messages', 
 'django.contrib.staticfiles', 
 'bootstrap3', 
 'reviews', 
 'registration'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.common.CommonMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'django.middleware.clickjacking.XFrameOptionsMiddleware'] 
 
 
 
Traceback: 
 
File "C:\Users\tymot\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner 
  35.             response = get_response(request) 
 
File "C:\Users\tymot\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response 
  128.                 response = self.process_exception_by_middleware(e, request) 
 
File "C:\Users\tymot\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response 
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs) 
 
File "C:\Users\tymot\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
  21.                 return view_func(request, *args, **kwargs) 
 
File "C:\Users\tymot\Desktop\Cd-12.50-20.08\env\my_app\winerama\reviews\views.py" in user_recommendation_list 
  89.         reverse=True 
 
Exception Type: TypeError at /recommendation/ 
Exception Value: '<' not supported between instances of 'method' and 'method' 

我根据教程中的步骤创建了所有内容。

文件模型.py

from django.db import models 
from django.contrib.auth.models import User 
import numpy as np 
 
 
class Wine(models.Model): 
    name = models.CharField(max_length=200) 
 
    def average_rating(self): 
        all_ratings = [list(map(lambda x: x.rating, self.review_set.all()))] 
        return np.mean(all_ratings) 
 
    def __unicode__(self): 
        return self.name 
 
 
class Review(models.Model): 
    RATING_CHOICES = ( 
        (1, '1'), 
        (2, '2'), 
        (3, '3'), 
        (4, '4'), 
        (5, '5'), 
    ) 
    wine = models.ForeignKey(Wine, on_delete=models.CASCADE) 
    pub_date = models.DateTimeField('date published') 
    user_name = models.CharField(max_length=100) 
    comment = models.CharField(max_length=200) 
    rating = models.IntegerField(choices=RATING_CHOICES) 
 
class Cluster(models.Model): 
    name = models.CharField(max_length=100) 
    users = models.ManyToManyField(User) 
 
    def get_members(self): 
        return "\n".join([u.username for u in self.users.all()]) 

接下来,我添加了 admin.py 并在“/admin”中创建了 3 个带有用户的 klaster。

from django.contrib import admin 
 
from .models import Wine, Review, Cluster 
 
class ReviewAdmin(admin.ModelAdmin): 
    model = Review 
    list_display = ('wine', 'rating', 'user_name', 'comment', 'pub_date') 
    list_filter = ['pub_date', 'user_name'] 
    search_fields = ['comment'] 
 
 
class ClusterAdmin(admin.ModelAdmin): 
    model = Cluster 
    list_display = ['name', 'get_members'] 
 
 
admin.site.register(Wine) 
admin.site.register(Review, ReviewAdmin) 
admin.site.register(Cluster, ClusterAdmin) 

我的文件views.py

@login_required 
def user_recommendation_list(request): 
    # get request user reviewed wines 
    user_reviews = Review.objects.filter(user_name=request.user.username).prefetch_related('wine') 
    user_reviews_wine_ids = set(map(lambda x: x.wine.id, user_reviews)) 
 
    # get request user cluster name (just the first one righ now) 
    user_cluster_name = \ 
        User.objects.get(username=request.user.username).cluster_set.first().name 
 
    # get usernames for other memebers of the cluster 
    user_cluster_other_members = \ 
        Cluster.objects.get(name=user_cluster_name).users \ 
            .exclude(username=request.user.username).all() 
    other_members_usernames = set(map(lambda x: x.username, user_cluster_other_members)) 
 
    # get reviews by those users, excluding wines reviewed by the request user 
    other_users_reviews = \ 
        Review.objects.filter(user_name__in=other_members_usernames) \ 
            .exclude(wine__id__in=user_reviews_wine_ids) 
    other_users_reviews_wine_ids = set(map(lambda x: x.wine.id, other_users_reviews)) 
 
    # then get a wine list including the previous IDs, order by rating 
    wine_list = sorted( 
        list(Wine.objects.filter(id__in=other_users_reviews_wine_ids)), 
        key=lambda x: x.average_rating, 
        reverse=True 
    ) 
 
    return render( 
        request, 
        'reviews/user_recommendation_list.html', 
        {'username': request.user.username, 'wine_list': wine_list} 
    ) 

我会标记当我尝试使用简单版本时一切正常。

@login_required 
def user_recommendation_list(request): 
    # get this user reviews 
    user_reviews = Review.objects.filter(user_name=request.user.username).prefetch_related('wine') 
    # from the reviews, get a set of wine IDs 
    user_reviews_wine_ids = set(map(lambda x: x.wine.id, user_reviews)) 
    # then get a wine list excluding the previous IDs 
    wine_list = Wine.objects.exclude(id__in=user_reviews_wine_ids) 
 
    return render( 
        request, 
        'reviews/user_recommendation_list.html', 
        {'username': request.user.username,'wine_list': wine_list} 
    ) 

我的错误是在这个 stage (2.5)的教程。阶段 2.4 效果很好。 一切都表明 views.py 中有问题。

任何帮助将不胜感激。