示例#1
0
def jet_sibling_object_url(context, next):
    original = context.get('original')

    if not original:
        return

    model = type(original)
    preserved_filters_plain = context.get('preserved_filters', '')
    preserved_filters = dict(parse_qsl(preserved_filters_plain))
    queryset = get_model_queryset(model, preserved_filters=preserved_filters)

    sibling_object = None
    object_pks = list(queryset.values_list('pk', flat=True))

    try:
        index = object_pks.index(original.pk)
        sibling_index = index + 1 if next else index - 1
        exists = sibling_index < len(object_pks) if next else sibling_index >= 0
        sibling_object = queryset.get(pk=object_pks[sibling_index]) if exists else None
    except ValueError:
        pass

    if sibling_object is None:
        return

    url = reverse('admin:%s_%s_change' % (
        model._meta.app_label,
        model._meta.model_name
    ), args=(sibling_object.pk,))

    if preserved_filters_plain != '':
        url += '?' + preserved_filters_plain

    return url
示例#2
0
def jet_sibling_object_url(context, next):
    original = context.get('original')

    if not original:
        return

    model = type(original)
    preserved_filters_plain = context.get('preserved_filters', '')
    preserved_filters = dict(parse_qsl(preserved_filters_plain))
    queryset = get_model_queryset(model, preserved_filters=preserved_filters)

    sibling_object = None
    object_pks = list(queryset.values_list('pk', flat=True))

    try:
        index = object_pks.index(original.pk)
        sibling_index = index + 1 if next else index - 1
        exists = sibling_index < len(
            object_pks) if next else sibling_index >= 0
        sibling_object = queryset.get(
            pk=object_pks[sibling_index]) if exists else None
    except ValueError:
        pass

    if sibling_object is None:
        return

    url = reverse('admin:%s_%s_change' %
                  (model._meta.app_label, model._meta.model_name),
                  args=(sibling_object.pk, ))

    if preserved_filters_plain != '':
        url += '?' + preserved_filters_plain

    return url
示例#3
0
def jet_sibling_object(context, next):
    original = context.get("original")

    if not original:
        return

    model = type(original)
    preserved_filters_plain = context.get("preserved_filters", "")
    preserved_filters = dict(parse_qsl(preserved_filters_plain))
    admin_site = get_admin_site(context)

    if admin_site is None:
        return

    request = context.get("request")
    queryset = get_model_queryset(admin_site,
                                  model,
                                  request,
                                  preserved_filters=preserved_filters)

    if queryset is None:
        return

    sibling_object = None
    object_pks = list(queryset.values_list("pk", flat=True))

    try:
        index = object_pks.index(original.pk)
        sibling_index = index + 1 if next else index - 1
        exists = sibling_index < len(
            object_pks) if next else sibling_index >= 0
        sibling_object = queryset.get(
            pk=object_pks[sibling_index]) if exists else None
    except ValueError:
        pass

    if sibling_object is None:
        return

    url = reverse(
        "%s:%s_%s_change" %
        (admin_site.name, model._meta.app_label, model._meta.model_name),
        args=(sibling_object.pk, ),
    )

    if preserved_filters_plain != "":
        url += "?" + preserved_filters_plain

    return {"label": str(sibling_object), "url": url}