Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos / models / utils.py
Size: Mime:
from django.db import models
from django.db.models.fields.related_descriptors import ManyToManyDescriptor, ReverseManyToOneDescriptor


def safe_get_fk_value(instance: models.Model, fk_field_name: str):
    model_cls = instance.__class__
    rel_model_cls = getattr(model_cls, fk_field_name).field.related_model
    try:
        return getattr(instance, fk_field_name)
    except rel_model_cls.DoesNotExist:
        return None


def get_queryset_from_related_field(model, field_name):
    # https://github.com/demiroren-teknoloji/django-admin-autocomplete-list-filter/blob/main/djaa_list_filter/admin.py#L71
    field_desc = getattr(model, field_name)
    if isinstance(field_desc, ManyToManyDescriptor):
        related_model = field_desc.rel.related_model if field_desc.reverse else field_desc.rel.model
    elif isinstance(field_desc, ReverseManyToOneDescriptor):
        related_model = field_desc.rel.related_model
    else:
        return field_desc.get_queryset()
    return related_model.objects.get_queryset()