0

私は単純なDjangoモデルを "Clothes"と呼んでいます。基本的には、ユーザーが持つ衣服の種類を取得します。私は20種類以上の服(パーカー、ジーンズ、ズボンなど)と、「トップ」「ボトム」「シューズ」の3種類の衣類に分類しました。あなたはより良いDjangoモデルのデザインを提案できますか? (私はdjango初心者です)

"服飾"では、 "トップ"、 "ボトム"、 "シューズ"のそれぞれについて最初の5つの服を表示します。 ユーザーがもっとクリックすると、カテゴリ別に5つ以上を取得します(ユーザーが「もっと上」をクリックすると「トップ」タイプの5つ以上の衣類が返されます)

あなたの理解を深めるため、服モデル概念。

class Clothes(models.Model): 
    id 
    type =   # hoodie, shirts, pants, jean, coat, and so on (more than 20) 
    big_type =  # top, bottom and shoes 
    owner = ForeignField # some one who post 

の予想される出力(これは私の推測です!)

  1. 各parent_types 5人の服( "トップ"、 "底部"、 "靴")

    を取得私の服<から "トップ"

    user.clothes_set.filter(big_type="top)[5:10] 
    
  2. 取得し、すべての "パーカー" の

    user.clothes_set.filter(big_type="top")[:5] 
    user.clothes_set.filter(big_type="bottom")[:5] 
    user.clothes_set.filter(big_type="shoes")[:5] 
    
  3. 取り出さ5人の以上の服 - これはOKになります

    user.clothes_set.filter(type="hoodies") 
    

方が良いお勧めできます効率的なモデルの?私は新しいTypeクラスを追加して "through"を入れるかもしれません...(私はわかりません)

答えて

1

あなたは正しいことをしていると思います。ここでは、limiting-querysetをお読みください。

  • この方法でデータベースにクエリを実行する場合は、これは、queryset全体を取り出してスライスするのではなく、良いオプションです。これにより、スライシング用のLIMITがデータベースに発行されますので、スライシングはデータベース内で行われます。

  • typeidのフィールドを持つTypesの新しいモデルを作成することをお勧めします。 次に、ケースに入っていない場合はManyToMany Relationを使用してマップします。その照会するため

type = Type.objects.get(type="Top").id 
clothes = Clothes.objects.filter(type=type)[:5] 

Typeための別のモデルは、クライアント側のレンダリングであなたを助けるたが、このようになります。

関連する問題