Django + PostgreSQL + DjangoRestFramework

时间:2015-08-05 00:41:29

标签: python django postgresql sqlalchemy django-rest-framework

我发现PostgreSQL有一个模型框架:

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import column_property
from ..base import Base

class Staff(Base):
    __tablename__ = 'account'
    id = Column(Integer, primary_key=True)
    name = column_property(Column(String(30), nullable=False))
    surname = column_property(Column(String(30)))
    otch = column_property(Column(String(30), nullable=False))
    b_date = column_property(Column(String(30)))
    pol = column_property(Column(String(3), nullable=False))
    email = column_property(Column(String(100)))
    gruppa = column_property(Column(String(30), nullable=False))
    fak = column_property(Column(String(30)))
    profile = column_property(Column(String(30), nullable=False))

有一种观点认为,通过序列化者必须提供详细信息:

if request.method == 'GET':
    session = request.sa_session
    h = session.query(Staff).all()
    for i in h:
        print i.name
    serializer = TaskSerializer(h, many=True)
    return Response(serializer.data)

说明TaskSerializer:

from db.admin.db import Staff
from rest_framework import serializers

class TaskSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Staff

但是当你跑步时,有一个错误:

  

类型对象'Staff'没有属性'_meta'

这个笑话是,如果模型是通过Model.model构建的:

from django.db import models

class Staff(models.Model):
    name = models.CharField(max_length=30)
    surname = models.CharField(max_length=30)
    otch = models.CharField(max_length=30)
    b_date = models.CharField(max_length=30)
    pol = models.CharField(max_length=3)
    email = models.CharField(max_length=100)
    gruppa = models.CharField(max_length=30)
    fak = models.CharField(max_length=30)
    profile = models.CharField(max_length=30)

一切正常。

是否可以使用SQLAlchemy模型或仅使用Django的models.Model

1 个答案:

答案 0 :(得分:1)

Django REST Framework仅支持Django ORM及其ModelSerializer。由于您使用的是SQAlchemy,您将无法使用任何这种优点。

DEPRECATED (有关新建议,请参见下文) - 有一个图书馆试图将对SQAlchemy的支持添加到DRF - DjangoREST Alchemy。完全披露 - 我知道作者是同事。但它只执行只读操作,因此它不支持DRF支持Django ORM的所有功能。不过,欢迎您发表问题和/或做出贡献!

编辑04/19 - DjangoREST Alchemy已被弃用。建议您查看django-sorcerydjango-rest-witchcraft。它们实现了更好的DRF集成,同时让您感觉就像使用Django ORM一样。