3

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

我的模型.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 模型/数据库解决方案。

任何和所有的想法表示赞赏。

4

1 回答 1

2

您需要的是中介 M2M 关系

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

我没有评估代码,但你明白了基本的想法

于 2012-08-31T00:53:05.647 回答