Я пытаюсь работать с несколькими концепциями моделей стиля аукциона, сейчас у меня есть модель Auction
и модель Bid
. Эти два относятся через ForeignKey в модели Bid
, с Bid.amount
, содержащей сумму, которую пользователь выставил.Создание модели аукциона a la eBay max bid style
Я уже использовать порядок на Bid.amount
поле, чтобы определить самую высокую цену, но мне было интересно, если есть простой способ определить max_bid
и выход для пользователя является то, что выглядит как система «умный торгов», a la eBay.
Так сказать, если применимо следующее
$ bid1 = 9000 # max bid for bid1 object
$ bid2 = 6000 # max bid for bid2 object
$ bid3 = 9500 # max bid for bid3 object
$ starting_price = 5000 # starting price for the auction
Когда bid1 помещается (что указывает на высокий умный ставка должна идти до 9000) текущая цена аукциона должна оставаться на 5000, так как нет никакой другой ставки на товар.
Когда bid2 находится текущая цена аукциона должна затем увеличить до 6001 (как bid1 еще выше)
Когда bid3 находится текущая цена аукциона должна затем увеличить до 9001 (перебив bid1, и становится текущий покупатель).
Если у кого-то есть идеи по наилучшему способу решения этого вопроса, я бы хотел их услышать.
Edit: мои модели, для справки
class Auction(models.Model):
seller = models.ForeignKey(User)
item_id = models.CharField(max_length=255, blank=True, null=True)
item_name = models.CharField(max_length=255, blank=True, null=True)
winner = models.ForeignKey(User, related_name='Auction_Winner', blank=True, null=True)
reserve = models.CharField(max_length=255, blank=True, null=True)
is_guildbank_sale = models.BooleanField(default=True)
created = models.DateTimeField(editable=False, null=True)
expires = models.DateTimeField(editable=False, null=True)
def __unicode__(self):
return '%s selling %s' % (self.seller, self.item_name)
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = datetime.today()
self.expires = datetime.today() + timedelta(days=3)
return super(Auction, self).save(*args, **kwargs)
class Bid(models.Model):
auction = models.ForeignKey(Auction, null=True)
user = models.ForeignKey(User, related_name='bid_owner', null=True)
bid_amount = models.IntegerField(blank=True, null=True)
class Meta:
verbose_name = "Auction Bid"
verbose_name_plural = "Auction Bids"
ordering = ['-bid_amount',]
get_latest_by = 'bid_amount'
Спасибо за это, я вижу несколько ошибок, которые вы, возможно, захотите исправить в своем коде. во-первых, вы не можете иметь отрицательный индекс, поэтому для получения второй наивысшей ставки будет [1] не [-2]. во-вторых, нет атрибута для bid_set с именем order, я считаю, что то, что вы искали, было бы .order_by. Увидев, что это уже определено в классе Meta, не нужно ли это просто быть .all()? –
Да, отрицательные индексы действительны. [Ссылка] (www.diveintopython.net/native_data_types/lists.html). Моя ошибка заключалась в сортировке спуска и по-прежнему с конца. Я изменил свой вид на восхождение и зафиксировал имя метода order_by. –
Отлично, это объясняет, почему я получал отрицательные индексные ошибки. Спасибо, что поняли это. :) –