Использование необязательных **kwargs в python

Я в процессе рефакторинга кодовой базы на Python, где я все еще изучаю их синтаксический сахар, поэтому надеюсь, что смогу получить некоторую помощь от экспертов здесь.

Я хочу написать общую функцию, которая принимает список необязательных аргументов с помощью **kwargs и делает вызов модели БД, используя список присутствующих аргументов. Например, если в вызове функции присутствуют 5 из 8 столбцов, то вызов create будет сделан с использованием этих 5 (остальные 3 уже принимают null в БД). Однако если я передам в функцию 7 значений, я должен иметь возможность использовать ту же функцию снова.

Вот о чем я думаю:

Класс контроллера ....

create(arg1=x, arg3=y, arg4=z, arg6=a, arg7=b)

create(arg1=x, arg2=x2, arg3=y, arg4=z, arg6=a, arg7=b, arg8=b2)

....

Модельный класс

    arg1 = models.CharField(max_length=255, null=True, blank=True)
    arg2 = models.CharField(max_length=255, null=True, blank=True)
    arg3 = models.DateTimeField(null=True, blank=True)
    arg4 = models.DateTimeField(null=True, blank=True)
    arg5 = models.CharField(max_length=255, blank=True, null=True)
    arg6 = models.CharField(max_length=255, blank=True, null=True)
    arg7 = models.CharField(max_length=255, blank=True, null=True)
    arg8 = models.BooleanField(null=True, blank=True)
  

    def create(**kwargs):
        DBMODEL.objects.create(
            arg1=kwargs['arg1'],
            arg2=kwargs['arg2'],
            arg3=kwargs['arg3'],
            arg4=kwargs['arg4'],
            arg5=kwargs['arg5'],
            arg6=kwargs['arg6'],
            arg7=kwargs['arg7'],
            arg8=kwargs['arg8']
        )

Можно ли это сделать с помощью моего кода выше или есть другие предложения?

Конечная цель - иметь одну функцию для обслуживания нескольких вызовов с различным количеством аргументов без необходимости иметь несколько if и else в вызываемой функции класса модели.

Любые предложения/идеи будут оценены по достоинству. Это то, в чем официальная документация мне не очень помогла.

Метод

create принимает **kwargs, поэтому может быть использован следующим образом:

values = {"field1": 1, "field2": 2, "field3": 3}
DBMODEL.objects.create(**values)  # same as DBMODEL.objects.create(field1=1, field=2, field3=3)

values = {"field1": 1, "field2": 2, "field3": 3, "field4": 4}
DBMODEL.objects.create(**values). # same as DBMODEL.objects.create(field1=1, field=2, field3=3, field4=4)
Вернуться на верх