iammehrabalam
iammehrabalam

Reputation: 1325

How Django model field take default value if field is None

I create a django model

class Apps(models.Model):
    name = models.CharField(max_length=300, default="name")
    package_name = models.CharField(max_length=255, default="package_name")

and i may or may not receive both (name, package_name)

my insert query function

def func(data):
    try:
       kwargs = dict(name=data.get('name'),
                     package_name=data.get('package_name'))
       app = Apps.objects.get(**kwargs)
    except:
       app = Apps(**kwargs)
       app.save()
    return app

My Problem is

when kwargs = {"name" : None, "package_name": "pkg"} than it take default value as specified in model field corresponding to name (because it is None in kwargs)

Upvotes: 2

Views: 1617

Answers (1)

Alex Morozov
Alex Morozov

Reputation: 5993

Django can't just substitute the default values to a query, you have to help it a bit:

In your model define some constants:

class Apps(models.Model):
    DEFAULT_NAME = 'name'
    DEFAULT_PACKAGE_NAME = 'package_name'

    name = models.CharField(max_length=300, default=DEFAULT_NAME)
    package_name = models.CharField(max_length=255, default=DEFAULT_PACKAGE_NAME)

And then just use them in your code:

def func(data):
    kwargs = dict(name=data.get('name', Apps.DEFAULT_NAME),
                  package_name=data.get('package_name', Apps.DEFAULT_PACKAGE_NAME))
    return Apps.objects.get_or_create(**kwargs)[0]

Upvotes: 2

Related Questions