Обучение Django путем создания приложения для ставок на eBay.
Одна из моих моделей - это простой класс ставок, в котором будет записываться ставка каждого пользователя для определенного листинга.
models.py
class Bid(models.Model):
bid = models.DecimalField(max_digits=10, decimal_places=2)
user = models.ForeignKey(User, on_delete=models.CASCADE)
listing = models.ForeignKey(Listing, on_delete=models.CASCADE)
forms.py
def listing_view(request, id):
form = BidForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.listing_id = id
# check bid is higher than starting bid or other bids or flash error message
current_bid = instance.bid
starting_bid = instance.listing.starting_bid
query = Bid.objects.all().filter(listing=id)
В Forms.py я пишу представление для проверки того, что ставка, введенная пользователем, больше чем существующие ставки. Это неполно, потому что я застрял при создании этого сравнения.
Самый простой способ - это l oop над переменной 'query' и выполнить сравнение, но есть ли более элегантное решение?
Я нашел решение, используя функцию all (), что-то вроде:
all(current_bid > i in my_list)
Но это работает только для сравнения со списком, а не с объектами формы
Есть ли способ l oop над запросом (т. Е. Для каждого в запросе) и проверить, является ли current_bid больше, чем все 'each.bid' в 1 строке?
Примерно так:
all(current_bid > i for i.bid in query)
К сожалению, это не работает. Я получаю NameError - имя 'i' не определено.
Спасибо!