def get_or_create(cls, **kwargs):
defaults = kwargs.pop('defaults', {})
query = cls.select()
for field, value in kwargs.items():
if '__' in field:
query = query.filter(**{field: value})
else:
query = query.where(getattr(cls, field) == value)
try:
return await query.get(), False
except cls.DoesNotExist:
try:
params = dict((k, v) for k, v in kwargs.items()
if '__' not in k)
params.update(defaults)
async with cls._meta.database.atomic():
return await cls.create(**params), True
except IntegrityError as exc:
try:
return await query.get(), False
except cls.DoesNotExist:
raise exc
评论列表
文章目录