Search code examples
djangodjango-modelsdjango-viewsdjango-formsdjango-admin

Display only certain values of foreignkey in django admin


I have three models in my django project. I want only those products to show up in django admin in product field of variation_price model for which variations already exist. How can I achieve that?

In models.py:

class VariationManager(models.Manager):
    def color(self):
        return super(VariationManager,self).filter(variation_category='color', is_active=True)
    
    def sizes(self):
        return super(VariationManager, self).filter(variation_category='size', is_active=True)

variation_category_choice = (
    ('color', 'color'),
    ('size', 'size'),
)

class Variation(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    variation_category = models.CharField(max_length=100, choices=variation_category_choice)
    variation_value = models.CharField(max_length=100) 
    objects = VariationManager()


class variation_price(models.Model):
    price = models.IntegerField()
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    variations = models.ManyToManyField(Variation, blank=True)
    is_active = models.BooleanField(default=True)

Thanks


Solution

  • You can filter with limit_choices_to=… [Django-doc]:

    class variation_price(models.Model):
        price = models.IntegerField()
        product = models.ForeignKey(
            Product,
            limit_choices_to={'variation__isnull': False},
            on_delete=models.CASCADE,
        )
        variations = models.ManyToManyField(Variation, blank=True)
        is_active = models.BooleanField(default=True)