Как наследовать и фильтровать данные из модели Django - PullRequest
1 голос
/ 12 апреля 2020

Как наследовать и фильтровать данные из базовой модели в Django?

Например, моя базовая модель выглядит следующим образом:

class Customers(models.Model):
     Time_Registered = models.DateField(blank=False)
     Number = models.CharField(max_length=500)
     Name = models.CharField(max_length=250)  
     Locations = models.ForeignKey(Locations, on_delete=models.CASCADE)

Что я хочу сделать, это создать другая модель, которая содержит информацию о клиенте, связанную с одним местоположением, например:

Class Canada(Customers):
    class Meta:
    proxy = True
  # filter by Canada'

1 Ответ

0 голосов
/ 12 апреля 2020

Вы можете сделать это sh, используя настраиваемый менеджер .

. Вы можете настроить пример из документации в соответствии со своими потребностями, например:

class CanadaCustomerManager(models.Manager):
    def get_queryset(self):
        # Adapt the query to your needs
        return super().get_queryset().filter(location__name="Canada")

И тогда вы создадите экземпляр менеджера в одной из ваших моделей (Customers или Canada).

Обратите внимание, что вам на самом деле не нужно определять новую модель прокси, если вы просто хотите определить настраиваемый менеджер. Например, вы можете использовать его в вашей Customers модели следующим образом:

class Customers(models.Model):
    Time_Registered = models.DateField(blank=False)
    Number = models.CharField(max_length=500)
    Name = models.CharField(max_length=250)  
    Locations = models.ForeignKey(Locations, on_delete=models.CASCADE)

    from_canada = CanadaCustomerManager()

И затем использовать его, например, для извлечения объектов:

>>> Customers.from_canada.all()

Как Примечание: при использовании Django соглашение состоит в том, чтобы объявлять модельные классы как существительные в единственном числе (то есть Customer, а не Customers). Это связано с тем, что каждый экземпляр модели представляет одного клиента, хотя в таблице БД содержатся все ваши клиенты.

Более того, имена атрибутов обычно объявляются без использования заглавных букв (то есть time_registered вместо Time_Registered ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...