Django管理员ManyToManyField按类型筛选同一个表

时间:2018-06-05 13:46:50

标签: python django django-models

我有两个表名

  1. 预订
  2. 服务

    在服务表中我存储两种类型的数据

    1. 服务
    2. 插件服务
  3. Models.py

    class services(models.Model):   
        Service_type_CHOICES = (
         (1, 'Service'),
         (2, 'Addon'),
        )
    
        service_id=models.IntegerField(primary_key=True)
        title=models.CharField(max_length=200)
        description=models.TextField()
        type=models.PositiveSmallIntegerField(choices=Service_type_CHOICES,) 
    
    def __str__(self):
        return self.title
    

    预订表

    class reservations(models.Model):
        user_id=models.IntegerField()
        arrival=models.DateTimeField()
        services_id=models.ManyToManyField(services, related_name='services')
        addons_id=models.ManyToManyField(services, related_name='addons')
    

    现在在我的管理员中,它显示如下截图 enter image description here

    目前它正在显示两个领域下的所有服务。我想按类型过滤它。我怎样才能在Django admin中实现这一点。

    我想首先显示服务类型1。 即cat1和cat2

    并且在插件ID上我只想显示类型2服务。 即Addon1和Addon2

1 个答案:

答案 0 :(得分:0)

您需要使用文档中指定的ManyToManyField.limit_choices_to

https://docs.djangoproject.com/en/1.11/ref/models/fields/

在你的情况下:

class reservations(models.Model):
    user_id=models.IntegerField()
    arrival=models.DateTimeField()
    services_id=models.ManyToManyField(services, limit_choices_to={'type': 1}, related_name='services')
    addons_id=models.ManyToManyField(services, limit_choices_to={'type': 2}, related_name='addons')