[英]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.