Как я могу скрыть записи элементов в формах с внешним ключом, когда они имеют 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.

Вернуться на верх