2012-01-04 7 views
0

私はモデルデータベースをスキャンし、特定の属性に基づいてモデルをマッチングする方法は? (ジャンゴ)

class dog(models.Model): 
    name = models.CharField(max_length=30, blank=True) 
    type = models.CharField(max_length=30, blank=True) 
    sex = models.CharField(max_length=30, blank=True) 

とビュー

def dog_matching(request): 
    # Create the new dog, starting with data from the previous HTML page 
    name = request.session['name'] 
    # Fill in the rest of the information on the current HTML page 
    if request.method == 'GET': 
     type = request.GET['type'] 
     sex = request.GET['sex'] 
    # Create an instance of the dog 
    dog_inst = dog(name=name, type=type, sex=sex) 
    # Save the instance to database 
    dog_inst.save() 
    # Perform matching and send email 

新しい犬が作成され、保存されます場合は、私は「タイプ」データベース内の各前の犬を見つけたいを持っています一致し、「性別」が異なります。その後、それぞれの試合について、ウェブサイト上の投稿が一致したことを通知するようにしたいとします。

どうやって実行するのですか?一致する操作、それで私が受け取る各電子メールが各一致に対応するように?

私はこの

if dog_inst.sex = 'male': 
    for dog.objects.get(sex__iexact="female"): 
    test = dog.objects.get(sex__iexact="female") 
     if test.type = dog_inst.type: 
      #Send email (I can find documentation for this) 

if dog_inst.sex = 'female': 
    for dog.objects.get(sex__iexact="male"): 
    test = dog.objects.get(sex__iexact="male") 
     if test.type = dog_inst.type: 
      #Send email (I can find documentation for this) 

任意のアイデアのような何かをしようとしていますか?

+0

なぜこれがダウンしていますか? –

答えて

1

Djangoでは、通常、モデルDogを呼び出します。その後、dogを使用して犬のインスタンスを参照することができます。私は私の答えでそれをしました。

filter()を使用する必要がある場合は、get()を使用していることが主な問題です。私はあなたがDjango Making queries guideの読んだことが本当に便利だと思うと思います。

つまり、特定のオブジェクトをフェッチする場合は、get()を使用します。

dog = Dog.objects.get(pk=5) # gets the dog with primary key 5 

あなたは、データベースへの新しい雌犬を保存した後、あなたはnew_dogと同じタイプのすべてのオス犬を見つけたいです。ここではfilter()を使用します。

ループ内の各犬のタイプを調べる代わりに、性別をにフィルタリングできます。

if new_dog.sex == 'female': # new_dog is the dog you have just created 
    dogs = Dog.objects.filter(sex__iexact="male", type=new_dog.type) 
    for dog in dogs: 
     # send email 
+0

ありがとう!これは信じられないほど便利でした。 –

関連する問題