没有模型的

时间:2016-09-26 14:20:09

标签: python django django-rest-framework

我想使用Django REST框架来创建一个API来调用不同的方法。我阅读[django-rest-framework] [1]的指南来使用这个框架,但我仍然有一些问题。

我没有模型我从外部数据库获取数据。我想先尝试一些简单的事情:

  • 获取所有项目列表
  • 从一个项目中获取数据

为此,我创建了新的应用程序,我包含在设置文件和我的view.py中,我将其包含在第一个案例中

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)

我的序列化程序文件我有这个

class cpuProjectsSerializer(serializers.Serializer):
  project = serializers.CharField(max_length=256)


  def update(self, instance, validated_data):
    instance.project = validated_data.get('project', instance.project)
    return instance

现在我执行此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)

但我得到了同样的错误!

对此有任何想法!

谢谢你的意见

1 个答案:

答案 0 :(得分:0)

来自docs here。您不必拥有创建Serializer类的模型。您可以定义一些序列化器字段然后使用它们。您不应导入CPUProjectsViewSet并在下面

中定义它
pointer-events:none;