3

私にはAとBの2つのクラスがあります。各AにはBの順序付けられたランキングがあり、各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モデル/データベースソリューションとしてこれを行う方法がわかりません。

ありとあらゆる考えに感謝します。

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 に答える