Django admin ManyToManyField фильтр по типу для той же таблицы - PullRequest
0 голосов
/ 05 июня 2018

У меня было имя двух таблиц

  1. Резервирование
  2. Сервисы

    В таблице сервисов хранятся два типа данных

    1. Сервис
    2. Аддон Сервис

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.

Я хочу отобразить тип сервиса 1 на первом месте.т.е. cat1 и cat2

и на идентификаторах аддонов я хочу показать только сервисы типа 2.т.е. Аддон1 и Аддон2

1 Ответ

0 голосов
/ 05 июня 2018

Вам необходимо использовать 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')
...