Reputation: 1325
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
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