Увеличение скорости поиска в 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