TIL 21: [Django ORM) update_or_create(), get_or_create()
6921 ワード
class CartView(View):
@authentication
def post(self, request):
data = json.loads(request.body)
current_user_id = request.user
try:
user_id = current_user_id
product_id = data['product_id']
purchase_quantity = data['quantity']
if not Product.objects.filter(id = product_id).exists():
return JsonResponse( {'MESSAGE' : 'PRODUCT DOES NOT EXIST'}, status = 400)
if Cart.objects.filter(user_id = user_id, product_id = product_id).exists():
current_product = Cart.objects.get(product_id = product_id, user_id = user_id)
current_product.purchase_quantity += int(purchase_quantity)
current_product.save()
else:
Cart.objects.create(
user_id = user_id,
product_id = product_id,
purchase_quantity = purchase_quantity
)
以上のコードは、プロジェクトでコメントを受け入れるコードの一部です.最初の項目ではショッピングバスケットの機能を創造し、商品IDがショッピングバスケットに存在する場合は、ショッピングバスケットの対応する商品に追加し、商品IDが存在しない場合は、ショッピングバスケットの新しい商品を追加する機能を体現する.その結果,上記のコードで実装されたが,検索中にupdate or createがget or createのORMであることが分かった.get_or_create
このメソッドは(object,created)というtuple形式で返されます.
最初のパラメータ(object)は、取り出すモデルインスタンスです.
2番目のパラメータ(created)は、TRUEまたはFALSEを有するboolean flagである.
インスタンスがget or createメソッドによって作成された場合、TRUEは、インスタンスがデータベースに存在する場合、FALSE値を有する.
order, created = Order.objects.get_or_create(user_id = user.id, status_id = IN_CART_STATUS_ID)
update_or_create
上記の方法と似たような方法で動作します.
インスタンスが存在する場合は、値が更新されます.
存在しない場合は、インスタンスを作成します.
obj, created = Person.objects.update_or_create(
first_name='John', last_name='Lennon',
defaults={'first_name': 'Bob'},
)
参考資料:https://docs.djangoproject.com/en/3.2/ref/models/querysets/Reference
この問題について(TIL 21: [Django ORM) update_or_create(), get_or_create()), 我々は、より多くの情報をここで見つけました https://velog.io/@kohys92/TIL-21-Django-ORM-updateorcreate-getorcreateテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol