1

フィールド first_name、last_name、email を持つ人物モデルがあります。これらのフィールドを、既存のインスタンスの DB をチェックするビューに送信したいと思います。存在する場合は ID が返され、存在しない場合は新しいインスタンスが作成され、新しい ID が返されます。標準の FBV を使用して、これを行います (バージョンを削減し、検証などを除く):

from django.http import HttpResponse
from mysite.models import Person
import json

def get_or_create_person(request):
    try:
        person = Person.objects.get(first_name=request.POST['first_name'],
            last_name=request.POST['last_name'], email=request.POST['email'])
    except Person.DoesNotExist:
        person = Person(first_name=request.POST['first_name'],
            last_name=request.POST['last_name'], email=request.POST['email'])
        person.save()

    response = {'id': person.id}
    return HttpResponse(json.dumps(response))

それを変換してCBVを使用し、それを残りのフレームワークと結び付けることに本当の意味はありますか?もしそうなら、どうすればそれを行うことができますか? CBV にしたい主な理由は、アプリの他の部分に既に含まれているミックスインなどを使用できるようにするためです。

編集:残り​​のフレームワークで利用可能な ViewSets を使用することを考えましたが、この機能を GET メソッドと POST メソッドに分割し、レコードを取得して更新または作成して投稿します。私は基本的にどちらかを受け入れることができるビューが必要です。

4

2 に答える 2

0

django-rest-framework のクラスベースのビューの場合、これは通常次の方法で行われます。

  1. リソースへの GET リクエストは、レコードを取得します
  2. 同じリソースへの POST リクエストはレコードを作成します

django rest フレームワークのドキュメントには、この例がいくつかあると思います

于 2013-06-18T16:31:42.003 に答える