繁体   English   中英

如何在扩展单独表模型的表模型上设置默认值,因为它是 SQL Alchemy 中的基础

[英]How to set default value on a tables model that extends a seperate tables model as it's base in SQL Alchemy

我对各种问题进行了很好的挖掘,似乎遗漏了一些我认为必须相当明显的东西。

在 Postgres 中,使用 Python、SQLAlchemy 和 FactoryBoy 运行(现在失败)测试,我有两个表模型......

  • 文件

Letter被实例化时,它会扩展File

class Letter(File):

--

File反过来扩展 SQL Alchemys DeclarativeBase

class File(DeclarativeBase):

--

File中,有一个名为content_type的属性。

content_type现在已在File上设置为not nullable

--

我需要做的感觉非常基本......

Letter中,我需要将默认content_type设置为"application/pdf" ……就是这样!

但是,尽管我一直在尝试,我似乎无法将其设置为Letter的默认内容类型

这意味着我们正在运行的测试在尝试创建File时失败,因为它没有content_type可以传递给File ,这意味着我得到了NotNullViolation

我尝试以几种不同的方式在Letter模型中设置它,但无济于事。

--

方法:

  • 我尝试在File的 Custom Base 模型和Letter中使用__init__并使用kawgs并尝试以这种方式设置它,尽管这不起作用。
  • 我曾考虑将列添加到Letter模型中,但这违反了第三范式,所以我认为有更好的方法来做到这一点。
  • 我试图通过我们正在运行的测试传递值,但没有任何运气(测试使用FactoryBoy
  • 有一个LetterFactory (来自FactoryBoy )这是问题的来源,我试图在没有任何运气的情况下将content_type = "application/pdf"添加到此。
  • 我还尝试在FactoryBoy - LetterFactory中的模型返回上设置content_type ,再次:
class Meta(SQLAlchemyOptions):
    model = Letter
    model.content_type = "application/pdf"
  • Letter模型本身中,我包括以下内容,但也没有任何运气:
@property
    def content_type(self):
        return "application/pdf"

--

对我认为可能是一个基本问题的道歉。

任何指针都会非常受欢迎。

这可能只是我不熟悉 SQL Alchemy 中的正确术语并遗漏了显而易见的情况。

有没有人理解我的问题并有他们可以给我的线索?

这对我有用,我最初一定有问题:

文件(基础):

...
def __init__(self, **kwargs):
    super().__init__(**kwargs)
...

信件(档案):

...
def __init__(self, **kwargs):
    kwargs.setdefault("content_type", "application/pdf")
    super().__init__(**kwargs)
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM