2016-07-13 8 views
-2

ユーザーが特定の金額で特定の金額で入札できるDjangoプロジェクトを作成しました項目。アイテムの所有者のテンプレートを作成して、入札者の金額とランクの一覧を見ることができます。入札を受け入れるために、私はリストにAcceptフィールドを作成します。Python:複数のユーザーが投稿したオブジェクト(入札)のリストからオブジェクト(入札)を受け取り、djangoを使用してユーザーの詳細を返す方法

私の入札者のリストページです。

アイテムの所有者が入札額を好むと、彼はそれを受け入れて、その特定の入札者の詳細にリダイレクトします。

私はどのようにして受け入れられた入札が保存され、入札者の詳細を返すように、ジャンゴモデルを作れますか?ここ

がbid_createとbid_listのための私のコードです:

models.py:

class Bid(models.Model): 
    user = models.OneToOneField(User, null=True, blank=True) 
    amount = models.IntegerField() 

forms.py:

class BidForm(forms.ModelForm): 

class Meta: 
    model = Bid 
    fields = ["amount"] 

views.py:

@login_required  
def bid_create(request): 
    form = BidForm(request.POST or None) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     print(form.cleaned_data.get("amount")) 
     instance.user = request.user 
     instance.save() 

    context = { 
     "form": form, 
    } 
    return render(request, "bid.html", context) 

def bid_list(request): 
    queryset = Bid.objects.all().order_by('amount') 

    current_rank = 1 
    counter = 0 

    for bid in queryset: 
     if counter < 1: # for first bid 
      bid.rank = current_rank 
     else: # for other bids 
      if bid.amount == queryset[counter - 1].amount: 
      # if bid and previous bid have same score, 
      # give them the same rank 
       bid.rank = current_rank 
      else: 
      # first update the rank 
       current_rank += 1 
      # then assign new rank to bid 
       bid.rank = current_rank 
     counter += 1 

    context = {"bid_rank" : "current_rank", 
       "queryset": queryset, 
       "title": "List"} 

    return render(request, 'bid_list.html', context) 

答えて

0

この質問は非常に一般的なので、私はちょっとしたことをお勧めします。

この情報を保存する場合は、少なくとも所有者を持つ第3クラス(Auction?)を作成します。そしてBidでは、そのオークションにForeignKeyを追加します。

class Auction(models.Model): 
    owner = ... 
    accepted_bid = models.ForeignKey(Bid) 

その後、ビュー(accept_bid)を作成する必要があり、かつauction_idbid_idを受け取り、それに指すURL、。ビューはこの入札をオークションに保存し、必要な場所にリダイレクトします。

+0

クラスオークション(models.Model): 所有者= models.ForeignKey(ユーザーは、null = Trueの場合、空白=真) accepted_bid = models.ForeignKey(入札) views.py: デフaccept_bid(リクエスト): \t return render(request、 'accept_bid.html') オークションでaccepted_bidをビューに渡すにはどうすればよいですか? – vanam

+0

ビューを指すURLを作成する必要があります。そのため、 'bid_id'を使ってテンプレートから呼び出すことができます。最後のurlが 'category'ビューにパラメータを渡している[この例(http://www.tangowithdjango.com/book17/chapters/models_templates.html#parameterised-url-mapping)]を見てください。 (このチュートリアルを完了すると多くの面で役に立ちます) – dnaranjo

関連する問題