Я пытаюсь создать модель инвентаризации для приложения Django, которое обрабатывает продажу семян. Семена хранятся и продаются в упаковках по 3, 5 или 10 семян одного сорта (например: 3 упаковки семян горчицы).
Я хочу добавить количество продуктов в инвентарь с ценой для каждой записи и продавать этот продукт по этой цене до тех пор, пока в этой записи остаются предметы (поле количества> 0), даже если для того же продукта были сделаны более поздние записи и презентация, но по другой цене, поэтому у меня есть следующая модель:
class Product(models.Model):
name = models.CharField(max_length=100)
class Presentation(models.Model):
seed_qty = models.IntegerField()
class Stock(models.Model):
date = models.DateField(auto_now=True)
quantity = models.IntegerField()
product = models.ForeignKey(Product, on_delete=models.CASCADE)
presentation = models.ForeignKey(Presentation, on_delete=models.CASCADE)
cost = models.FloatField(null=True, blank=True)
sell_price = models.FloatField(null=True, blank=True)
Мне интересно, действительно ли я должен связать Product и Stock с полем ManyToMany через промежуточную модель GeneralEntry, в которой я бы сохранил date_added, презентацию и стоимость / цену.
Моя проблема заключается в том, что когда я добавляю несколько записей на складе для одного и того же продукта и презентации, я не могу запросить самые ранние цены для каждой доступной (количество> 0) записи на складе для каждого продукта.
То, что я пробовал до сих пор, было:
stock = Stock.objects.filter(quantity__gt=0).order_by('-date')
stock = stock.annotate(min_date=Min('date')).filter(date=min_date)
Но это возвращает, что max_date не определен.
Есть идеи, как запросить или переставить эту модель?
Спасибо!
*** ОБНОВЛЕНИЕ: я не использовал функцию F () из django.db.models.
Это работает так:
stock = Stock.objects.filter(quantity__gt=0).order_by('-date')
stock = stock.annotate(min_date=Min('date')).filter(date=F('min_date'))
stock = Stock.objects.filter(quantity__gt=0).order_by('date')
- person Alan Hoover   schedule 01.04.2018