Как я могу скрыть записи элементов в формах с внешним ключом, когда они имеют 0 количество в формах django?
Я хочу скрыть записи о товарах, которые равны 0 или отсутствуют на складе, мой текущий код для процесса заимствования товаров следующий. Класс Item является местом хранения запасов на складе, а Activity является местом хранения заимствованных заказов.
Models.py
class Item(models.Model):
ItemName = models.CharField(max_length=255, blank=True, null=True)
Quantity = models.IntegerField(null=True, default=1,
validators=[
MaxValueValidator(100),
MinValueValidator(0)
])
ModelNum = models.CharField(max_length=255, blank=True, null=True)
Category = models.ForeignKey(Category,on_delete=models.CASCADE, null=True)
date_created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
is_draft = models.BooleanField(default=True)
reorder_level = models.IntegerField(blank=True, default=10,
validators=[
MaxValueValidator(100),
MinValueValidator(1)
])
class Meta:
verbose_name_plural = 'Item'
def __str__(self):
return f'{self.ItemName}'
class Activity(models.Model):
Item = models.ForeignKey(Item, on_delete=models.CASCADE, null=True)
staff = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True)
project_site = models.ForeignKey(Projects, on_delete=models.CASCADE, null=True)
Quantity = models.PositiveIntegerField(null=True, default=1,
validators=[
MaxValueValidator(100),
MinValueValidator(1)
])
date_created = models.DateTimeField(auto_now_add=True)
is_draft = models.BooleanField(default=True)
request_status = models.IntegerField(default=0,
validators=[
MaxValueValidator(3)
])
return_status = models.IntegerField(default=0,
validators=[
MaxValueValidator(3)
])
note = models.TextField(max_length=255, null=True)
class Meta:
verbose_name_plural = 'Item Request'
def __str__(self):
return f'{self.Item}'
Forms.py
class ActivityForm(forms.ModelForm):
class Meta:
model = Activity
fields = ['Item', 'Quantity', 'project_site']
Вы можете ограничить выбор Item, у которых есть quantity, по крайней мере, один с параметром [limit_choices_to=… [Django-doc]]:
class Activity(models.Model):
item = models.ForeignKey(
Item,
on_delete=models.CASCADE,
null=True,
limit_choices_to={'Quantity__gt': 0}
)
# …
Примечание: обычно имена полей в модели Django записываются в snake_case, а не PascalCase, поэтому должно быть:
itemвместо.Item