Python 关于我的django鞋款的帮助,请访问我的鞋评网站

Python 关于我的django鞋款的帮助,请访问我的鞋评网站,python,django,database-design,django-models,Python,Django,Database Design,Django Models,我在这一点上努力实现的目标是: 允许我添加新的shoe对象和shoe review对象。完整的 允许对每双鞋进行“车主评论”(我想,但我的模型中可能有一些地方我可以改进) 允许对我定义的链接到特定鞋款的属性进行评级。优选地,具有迭代与特定鞋相关的所有评级字段的简单方法 我的总体目标是有一个简单的方法,能够建议与用户在过去的评级类似的属性评级的鞋。然后允许根据品牌、价格、基于属性评级的高/低排序对这些鞋子评论进行筛选,并根据鞋子用于的活动(标签)使用这些排序选项 我觉得自己很亲密,但却错过了一

我在这一点上努力实现的目标是:

  • 允许我添加新的shoe对象和shoe review对象。完整的
  • 允许对每双鞋进行“车主评论”(我想,但我的模型中可能有一些地方我可以改进)
  • 允许对我定义的链接到特定鞋款的属性进行评级。优选地,具有迭代与特定鞋相关的所有评级字段的简单方法
  • 我的总体目标是有一个简单的方法,能够建议与用户在过去的评级类似的属性评级的鞋。然后允许根据品牌、价格、基于属性评级的高/低排序对这些鞋子评论进行筛选,并根据鞋子用于的活动(标签)使用这些排序选项
我觉得自己很亲密,但却错过了一些我需要的关系。能够使用以下内容获得高评级的鞋评将非常方便

ShoeReview.objects.filter(owner_review__ratings__rating_attribute = 'overall').sort_by(owner_review__ratings__rating)
我认为以上是正确的?再次,我是django的新人,所以请原谅任何愚蠢的错误。和往常一样,我在这里询问之前已经用我的代码进行了几天的黑客攻击,所以不要认为我只是在没有付出自己努力的情况下发布了这篇文章

以下是models.py文件内容:

from django.db import models
from django.contrib.auth.models import User
from tagging.fields import TagField

class Brand(models.Model):
        def __unicode__(self):
                return self.name
        name = models.CharField(max_length=200)
        popularity = models.PositiveIntegerField(default=0)

class Shoe(models.Model):
        def __unicode__(self):
                return self.name
        brand = models.ForeignKey(Brand)
        name = models.CharField(max_length=200)
        description = models.TextField()
        price = models.PositiveIntegerField()
        buylink = models.URLField(verify_exists='true', default="http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FAthletic-Outdoor%2Fb%3Fie%3DUTF8%26node%3D679564011%26ref_%3Damb%5Flink%5F23091522%5F13&tag=runnshoerevi-20&linkCode=ur2&camp=1789&creative=390957", max_length=400)
        picture = models.ImageField(upload_to='shoes', blank=True, default="shoes/default_picture.jpg")
        youtube_video_id = models.CharField(max_length=25, blank=True)

class RatingAttributes(models.Model):
        def __unicode__(self):
                return self.attribute
        attribute = models.CharField(max_length=65)

class Rating(models.Model):
        def __unicode__(self):
                return "%s, %s: %s" % (str(self.author), str(self.rating_attribute), str(self.rating))

        rating_attribute = models.ForeignKey(RatingAttributes)
        author = models.ForeignKey(User)
        pub_date = models.DateTimeField(auto_now_add='true')
        rating = models.IntegerField(blank=True, null=True)

class OwnerReview(models.Model):
        def __unicode__(self):
                return self.comments
        author = models.ForeignKey(User)
        pub_date = models.DateTimeField(auto_now_add='true')
        shoe = models.ForeignKey(Shoe)
        youtube_video_id = models.CharField(max_length=25, blank=True)
        comments = models.TextField()
        # this field will be increased every time a user clicks "this review was helpful and all reviws will be sorted by the helpfulness value
        ratings = models.ForeignKey(Rating)
        helpfulness = models.IntegerField(default=0, blank=True)

class ShoeReview(models.Model):
        def __unicode__(self):
                return self.title
        pub_date = models.DateTimeField(auto_now_add='true')
        author = models.ForeignKey(User, related_name='reviews')
        title = models.CharField(max_length=200)
        keywords = models.CharField(max_length=800, blank=True, default="Shoe Review")
        slug = models.SlugField(unique=True)
        cur_shoe = models.ForeignKey(Shoe)
        staff_opinion = models.TextField()
        owner_review = models.ForeignKey(OwnerReview)
        shoe_activities = TagField()
相反:

ShoeReview.objects.filter(owner_review__ratings__rating_attribute = 'overall').sort_by(owner_review__ratings__rating)
你应致电:

ShoeReview.objects.filter(owner_review__ratings__rating_attribute__attribute = 'overall').order_by(owner_review__ratings__rating)
owner\u review\u ratings\u rating\u attribute
期望模型(它将从模型中检索pk并在查询中使用它)。还有按方法排序,而不是按排序。除此之外,这个问题似乎很好。试着运行它,如果您得到了结果或者出现了一些错误,请告诉我。尝试在
/manage.py shell中运行它,这样可以轻松快速地检查它是否工作。

您应该执行以下操作:

ShoeReview.objects\
          .filter(owner_review__ratings__rating_attribute__attribute='overall')\
          .order_by(owner_review__ratings__rating)
但实际上,你最好使用一个经理:

class BestShoesReviewManager(models.Manager):
    def get_query_set(self):
        qs =  super(DahlBookManager, self).get_query_set()
        return qs.filter(owner_review__ratings__rating_attribute__attribute= 'overall')\
                 .order_by(owner_review__ratings__rating)
通过这种方式,您可以:

class ShoeReview(models.Model)

    objects = models.Manager() # The default manager.
    best = BestShoesReviewManager() # The best review manager.
因此,在代码中,您可以执行以下操作:

ShoeReview.objects.best()

谢谢你的回答。不过我想补充一个更具体的问题,因为我问的问题有点宽泛。有没有更好的方法来模拟评论之间的关系?我应该把评论直接绑在鞋子上吗?我做的对吗?谢谢,科迪