Code reference › domain › common

module

pretalx.common.domain.queries.log

Functions 3

actions_by(person)source
def actions_by(person):
    return (
        ActivityLog.objects.filter(person=person)
        .select_related("event")
        .prefetch_related("person__profile_picture", generic_event_prefetch())
    )
event_activity_log(event)source
def event_activity_log(event):
    return (
        ActivityLog.objects.filter(event=event)
        .select_related("person__profile_picture", "event")
        .prefetch_related(generic_event_prefetch())
    )
generic_event_prefetch()source
def generic_event_prefetch():
    qualifying_paths = {
        "event": (Event, "event__cfp"),
        "submission": (Submission, "submission__event__cfp"),
        "question": (Question, "question__event__cfp"),
    }
    supplementary_paths = {"user": (User, "user")}

    models = []
    querysets = []
    for model in apps.get_models():
        targets = {
            field.name: field.related_model
            for field in model._meta.fields
            if field.is_relation
        }
        paths = [
            path
            for name, (target, path) in qualifying_paths.items()
            if targets.get(name) is target
        ]
        if not paths:
            continue
        paths += [
            path
            for name, (target, path) in supplementary_paths.items()
            if targets.get(name) is target
        ]
        models.append(model)
        querysets.append(model._base_manager.select_related(*paths))
    ContentType.objects.get_for_models(*models)
    return GenericPrefetch("content_object", querysets)