【问题标题】:Django: Efficient model for ordered list of objectsDjango:对象有序列表的高效模型
【发布时间】:2012-08-31 00:16:26
【问题描述】:

我有两个类:A 和 B。每个 A 有一个有序的 Bs 排名,每个 B 有一个有序的排名 As。

我的models.py:

class A(models.Model):
    name = models.CharField(max_length=200)
    ...

class B(models.Model):
    name = models.CharField(max_length=200)
    ...

class Ranking(models.Model):
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)
    rankofa = models.IntegerField()
    rankofb = models.IntegerField()

我需要做的例子:

  • 查找 B 已排名的 As 数。
  • 按顺序遍历由特定 A 排名的所有 B,并评估 B 的某些属性。
  • 转到 A 中排名最低的 B,并找到该 B 给该 A 的排名。

我想将排名设置为对象的数组/列表(或某种不会持续进行昂贵的数据库调用的方式),但不确定如何将其作为 Django 模型/数据库解决方案。

感谢所有想法。

【问题讨论】:

    标签: python django design-patterns django-models


    【解决方案1】:

    你需要的是intermediary M2M relation

    class Seller(models.Model):
        name = models.CharField(max_length=200)
    
    class Customer(models.Model):
        name = models.CharField(max_length=200)
        feedbacks = models.ManyToManyField(Seller, through='Feedback', related_name='feedbacks')
    
    class Feedback(models.Model):
        seller = models.ForeignKey(Seller)
        customer = models.ForeignKey(Customer)
        seller_feedback = models.IntegerField()
        customer_feedback = models.IntegerField()
    

    查找客户排名的卖家数量:

    customer.feedbacks.all().count()
    

    按特定卖家排名的所有客户按顺序迭代并评估一些客户属性。

    for customer in seller.feedbacks.all():
        do_something(customer)
    

    转到卖家排名最低的客户,并找到该客户给该卖家的排名。

    def lowes_feedback_response(seller):
        try:
            return models.Feedback.filter(seller=seller).order_by('-seller_feedback')[0].customer_feedback
        except models.Feedback.DoesNotExist:
            return None
    

    我没有评估代码,但您了解基本概念

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2014-08-22
      • 2017-04-14
      • 2020-05-20
      • 1970-01-01
      • 2012-07-21
      • 2010-10-17
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多