【问题标题】:Django + PostgreSQL + DjangoRestFrameworkDjango + PostgreSQL + DjangoRestFramework
【发布时间】:2015-10-27 14:03:49
【问题描述】:

我发现 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

【问题讨论】:

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


    【解决方案1】:

    Django REST 框架仅支持带有 ModelSerializers 的 Django ORM。由于您使用的是 SQAlchemy,因此您将无法使用这些优点。

    已弃用(新建议见下文)- 有一个库试图向 DRF 添加对 SQAlchemy 的支持 - DjangoREST Alchemy。完全披露——我知道作者是同事。然而,它只执行只读操作,因此它不支持 DRF 支持的 Django ORM 的所有功能。非常欢迎您提出问题和/或贡献!

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

    【讨论】:

    • 我很理解这个库不是 относитя 以任何方式休息,只是独立? SqlAlchemy 是否可以通过某种方式转移到 Model 中?
    • 据我所知,没有办法将 SQLAlchemy 模型转换为 Django ORM 模型,并且由于其他原因(例如两者如何管理数据库会话等),这似乎是个坏主意。与其在 2 个 ORM 之间转换模型,不如创建实用程序来直接将模型转换为序列化器。
    • 如何将模型转换为序列化器?
    • 查看我链接的库。它有一些设施可以做到这一点
    • 你可以大致写成序列化器的样子,我不是完全理解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2011-11-10
    • 2021-02-03
    • 2014-03-30
    • 2019-06-27
    • 2016-01-26
    相关资源
    最近更新 更多