2016-07-21 7 views
0

私は、その機能を説明するいくつかのフィールドを持つクラスCarを持っているとしましょう。 {{ object.price }}などを使用してこれらの機能を呼び出すと表示されます。ほとんどの似たような車のDjango自己参照クラス

最近隣のアルゴリズムでは、私は各車に最も類似した車のリストを計算しました。たとえば、車。 私のクラスでmost_similar_carsに使用するフィールドの種類はありますか?関係は対称ではないことに注意してください。私。自動車Bは自動車Aの最も近い隣にあるかもしれないが、自動車Aは必ずしも自動車Bの最も近い隣人である必要はない。また、最も類似している、第2の最も類似した、第3のほとんどなどを区別することができる必要がある。

models.py

from django.db import models 

# Create your models here. 

class Car(models.Model): 
    """A model of a bureau.""" 
    car_model = models.CharField(max_length = 50) 
    price = models.IntegerField(default=1) 
    most_similar = ? 

    def __str__(self): 
     return self.car_model 

本当に誰かが助けてくれることを願っています。共にありがとうございました。

答えて

2

おそらく、最も近い車を発注するためのカスタムリレーションモデルを使用する非対称M2Mが必要です。

class Car(models.Model): 
    """A model of a bureau.""" 
    car_model = models.CharField(max_length = 50) 
    price = models.IntegerField(default=1) 
    most_similar = models.ManyToManyField('self', symmetrical=False, through='CarRelation') 

    def __str__(self): 
     return self.car_model 


class CarRelation(models.Model): 
    car = models.ForeignKey(Car) 
    close_car = models.ForeignKey(Car, related_name='nearest_cars') 
    order = models.PositiveIntegerField() 

    class Meta: 
     ordering = ('order',) 

は、その後、あなたがこのような関係を追加することができます:あなたのケースでは

a = Car.objects.create(car_model='A') 
b = Car.objects.create(car_model='B') 
relation = CarRelation.objects.create(car=a, close_car=b, order=1) 
Djangoのドキュメントで

さらに詳しい情報:https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

+1

おそらくまた、いくつかの 'unique_together'制約を追加したいと思いますスルーモデルで。 – solarissmoke

+0

@solarissmokeなぜ、どのように説明できますか? ManyToManyFieldをunique_togetherに含めることができないという理解がありました。 – Wessi

+1

@Wessi私は、( 'car'、 'close_car'、 'order') 'などのように、独自モデルの中にいくつかの' unique_together'制約を加えるべきであることを意味しています。 – solarissmoke