0

私はこのような単純なモデルを持っています:

class Auction(models.Model):
    name = models.CharField()

class Item(models.Model):
    auction = models.ForeignKey(Auction)
    name = models.CharField()
    price = models.FloatField()

class Bid(models.Model):
    item = models.ForeignKey(Item)
    user = models.ForeignKey(User)
    price = models.FloatField()

ユーザーはアイテムに入札します。ユーザーが各アイテムに1回だけ入札できることを知っています。オークションIDを持っている場合、そのオークションに入札したすべてのユーザーオブジェクト(のような単純なユーザー名ではないvalues_list())を取得できますか?

編集:私はまた、「で」の使用を避けたい

4

2 に答える 2

4
users = User.objects.filter(bid__item__auction_id=auction_id)
于 2012-05-25T22:53:50.673 に答える
1

おそらくもっと簡単にできるでしょうが、これが私が試みる方法です。

関連する名前を追加します。

from django.db import models
from django.contrib.auth.models import User

class Auction(models.Model):
    name = models.CharField(max_length=20)

class Item(models.Model):
    auction = models.ForeignKey(Auction,related_name="items")
    name = models.CharField(max_length=20)
    price = models.FloatField()

class Bid(models.Model):
    item = models.ForeignKey(Item,related_name="bids")
    user = models.ForeignKey(User,related_name="bids")
    price = models.FloatField()

さて、あなたがこれらを持っているなら:

a = Auction.objects.get(pk=auction_id)
users = set([]) #because there's no reason to have dupe users
for item in a.items.all():
    for bid in item.bids.all():
        users.add(bid.user)

これで、そのオークションで1つ以上の入札を行ったすべてのユーザーがリストに含まれます。

于 2012-05-25T23:02:57.747 に答える