Увеличение скорости поиска в Django set.all()

Я использую Django для фильтрации данных в MongoDB. Сейчас у меня есть код, который работает, и я нашел, где у меня замедление...

def does_this_property_apply(prop, app, dev, event):

    for platform_device in prop.platformdevice_set.all():
        for event in platform_device.applicable_events.all():
            if event.name == event:
                for app in platform_device.applicable_app.all():
                    if app.name == app:
                        for device in platform_device.applicable_device.all():
                            if device.name == dev:
                                print("This property applies")

В общем, у меня есть 400+ свойств, которые содержат кучу метаданных. Внутри каждого свойства находится объект platform_device (модель), который содержит такую информацию, как app, dev и event. Считайте, что это свойство применяется только к определенным приложениям, на определенных устройствах, при определенных действиях (событиях) пользователя. У каждого свойства их может быть несколько.

Я новичок в Django и пытаюсь понять, как я могу быстро найти все platform_device в базе данных и выяснить, применимо ли это свойство (prop) к моему событию, устройству и приложению.

class PlatformDevice(models.Model):
    _id = models.UUIDField(unique=True, primary_key=True,default=uuid.uuid4, editable=False)
    name = 'Property Specifics'

    property_field = models.ForeignKey('Property', on_delete=models.CASCADE)

    applicable_app = models.ArrayReferenceField(to=Platform, on_delete=models.CASCADE, blank=True)
    applicable_device = models.ArrayReferenceField(to=Device, on_delete=models.CASCADE, blank=True)
    applicable_events = models.ArrayReferenceField(to=Event, on_delete=models.CASCADE, blank=True)
    event_group = models.ArrayReferenceField(to=EventGroups, on_delete=models.CASCADE, blank=True)

    def __str__(self):
        return self.name
Вернуться на верх