2016-09-26 23 views
-1

Django RESTフレームワークを使用して、さまざまなメソッドを呼び出すAPIを作成したいと考えています。このフレームワークを扱うために[django-rest-framework] [1]のガイドを読んでいますが、まだいくつか質問があります。モデルのないDjango RESTフレームワーク

モデルがありません。私は外部データベースからデータを取得しています。

  • 私は設定ファイルに、私のビューに含める私は新しいアプリを作成し、そのために一つのプロジェクト

からデータを取得し、プロジェクトのすべてのリストを取得します。私は、単純な最初のものを試してみたいです私は私のシリアライザファイル

def connect_database(): 
    db = MySQLdb.connect(host='...', port=, user='...', passwd='...', db='...') 
    try: 
    cursor = db.cursor() 
    cursor.execute('SELECT * FROM proj_cpus') 
    columns = [column[0] for column in cursor.description] 
    # all_rows = cursor.fetchall() 
    all_rows = [] 
    for row in iter_row(cursor): 
     all_rows.append(dict(zip(columns, row))) 
    finally: 
    db.close() 
    return all_rows 

def iter_row(cursor, size= 1000): 
    while True: 
    results = cursor.fetchmany(size) 
    if not results: 
     break 
    for item_result in results: 
     yield item_result 


class cpuProjectsViewSet(viewsets.ViewSet): 
    serializer_class = serializers.cpuProjectsSerializer 

    def list(self, request): 
    all_rows = connect_database() 
    name_project = [] 
    for item_row in all_rows: 
     name_project.append(item_row['project']) 
    name_project = list(sorted(set(name_project))) 
    serializer = serializers.cpuProjectsSerializer(instance=name_project, many=False) 
    return Response(serializer.data) 

拳のケースのために、私はこの

を持っていることを含んでの.py私はこの http://127.0.0.1:8000/hpcAPI

は私が

Got AttributeError when attempting to get a value for field `project` on serializer `cpuProjectsSerializer`. 
The serializer field might be named incorrectly and not match any attribute or key on the `list` instance. 
Original exception text was: 'list' object has no attribute 'project'. 

私はグーグルで探し、このエラーを取得し、私は変更の実行今

この

serializers.cpuProjectsSerializer(instance=name_project, many=False)

serializers.cpuProjectsListSerializer(instance=name_project, many=False) 

が、私は得るために同じエラー!

ドキュメントhere。あなたからadavances

+0

あなたのコードが実際にどのように見えるか、インデントに問題がありますか?そのように見えたら、おそらく 'SyntaxError'があるでしょう。 –

+0

ありがとう@Games Brainiac私は、私はいくつかの行を移動する貼り付けたときに私は、おそらく私は、私は空のファイルを持っているシリアライザファイルに問題があるインデントに問題はない、ライン。私はどのようにプロジェクトのリストを返すためにこのファイルを正確に持っていなければならないのか分かりません。 – Stone

答えて

0

おかげでシリアライザclass.Youがそれらを使用し、いくつかのシリアライザフィールドを定義することができます作成​​するためのモデルを持っている必要はありません。 CPUProjectsViewSetをインポートして、それを以下で定義しないでください。

from mysite.hpcAPI.serializers import CPUProjectsViewSet 

class CPUProjectsViewSet(viewsets.ViewSet): 
""" 
return all project name 
""" 
    all_rows = connect_database() 
+0

あなたの助言のために@Windsooonを助けてくれてありがとう、私は自分のコードを変更し、このエラーを取得 'AttributeErrorフィールド'プロジェクト 'の値をシリアライザ' cpuProjectsSerializer'で取得しようとした。 シリアライザフィールドの名前が正しくない可能性があり、 'list'インスタンスの属性またはキーと一致しない可能性があります。 元の例外テキストは 'list'オブジェクトの属性は 'project'ではありません。 – Stone

関連する問題