gpt4 book ai didi

python - 具有附加模型字段的 Django 代理模型?

转载 作者:太空狗 更新时间:2023-10-29 21:07:44 24 4
gpt4 key购买 nike

我正在编写一个像报纸一样工作的 Django 应用程序。我有文章,然后我有在某些上下文中出现的那些文章的自定义版本。因此,我可以为报纸头版上的一篇文章提供一个版本,该版本具有文章原始标题的较短版本。所以我有:

class Article(models.Model):
""" A newspaper article with lots of fields """
title = models.CharField(max_length=255)
content = models.CharField(max_length=255)

# Lots of fields...

我想要一个 CustomArticlè 对象,它是 Articlè 的代理,但有一个可选的替代标题:

class CustomArticle(Article):
""" An alternate version of a article """
alternate_title = models.CharField(max_length=255)

@property
def title(self):
""" use the alternate title if there is one """
if self.custom_title:
return self.alternate_title
else:
return self.title

class Meta:
proxy = True

# Other fields and methods

不幸的是,我无法向代理添加新字段:

>>> TypeError: Abstract base class containing model fields not permitted for proxy model 'CustomArticle'

所以,我可以这样做:

class CustomArticle(models.Model):
# Other methods...

original = models.ForeignKey('Article')

def __getattr__(self, name):
if hasattr(self.original):
return getattr(self.original, name)
else:
return super(self, CustomArticle).__getattr__(name)

但不幸的是,__getattr__ 似乎不适用于 Django 模型。 Article 类中的字段可能会更改,因此为 CustomArticle 中的每个字段创建一个 @property 方法是不切实际的。执行此操作的正确方法是什么?

最佳答案

看起来这可能适用于 __getattr__:

def __getattr__(self, key):

if key not in ('original', '_ original_cache'):
return getattr(self.original, key)
raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, key))

关于python - 具有附加模型字段的 Django 代理模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com