Search code examples
djangomodels

Django: Filter & function


I have currently these to utils functions. The only difference between unique_account_link_generator and unique_order_id is what they filter within qs_exists. It's either .filter(slug=new_id) or .filter(order_id=new_id)

I now wonder is there a way to combine them and then being able to define the filter method when I call the function: unique_id_generator(instance, _filter = "order_id")

import random
import string

def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

def unique_account_link_generator(instance):
    """
    1. Generates random string
    2. Check if string unique in database
    3. If already exists, generate new string
    """

    new_id = random_string_generator()

    myClass = instance.__class__
    qs_exists = myClass.objects.filter(slug=new_id).exists()
    if qs_exists:
        return unique_account_link_generator(instance)
    return new_id

# How to send field_name via function?
def unique_id_generator(instance):
    """
    1. Generates random string
    2. Check if string unique in database
    3. If already exists, generate new string
    """

    new_id = random_string_generator()

    myClass = instance.__class__
    qs_exists = myClass.objects.filter(order_id=new_id).exists()
    if qs_exists:
        return unique_id_generator(instance)
    return new_id

Solution

  • Not sure I understood the question, as the answer is very simple:

    def unique_id_generator(instance, _filter="order_id"):
        new_id = random_string_generator()
    
        myClass = instance.__class__
        qs_exists = myClass.objects.filter(**{_filter:new_id}).exists()
        if qs_exists:
            return unique_id_generator(instance, _filter)
        return new_id