【问题标题】:Manager gives a queryset from files and not from a databaseManager 从文件而不是从数据库中提供查询集
【发布时间】:2010-08-23 11:55:08
【问题描述】:

我想重写管理器类,以允许将内容数据从文本文件(此处为“/one directory/myPrefix_*”)加载到内容字段而不是从数据库表中。

class Things(model.Models):
    file    = CharField(max_length = 25, primary key = True)
    content = TextField()
    objects = myManager("/one directory/", "myPrefix_")

如果可能的话,我希望在管理站点中使用这个类。

我的狂野梦想可能吗?

【问题讨论】:

  • “允许从文本文件加载内容数据”...这是否意味着您要使用文本文件而不是数据库后端?
  • 是的。我知道数据库更加现代和灵活。但由于最终结果必须写入文件,因此数据库会复制“内容”字段的值。

标签: django file django-queryset


【解决方案1】:

我会通过将对象重命名为 _objects 来解决这个问题,然后创建一个属性函数来加载数据。类似下面的代码应该可以满足您的需要...

class Things(model.Models):
    file    = CharField(max_length = 25, primary key = True)
    content = TextField()
    _objects = CharField(max_length = 50)

    @property
    def objects(self):
        return load_content_from("/one directory/myPrefix_" + self._objects)

如果您想查看管理站点中文件的内容,那么您可能需要创建自己的字段类型(请参阅http://code.djangoproject.com/browser/django/trunk/django/db/models/fields)。

【讨论】:

  • 首先,感谢您的回答。但在这种情况下, Thinks.objects.all() 将不再可访问,因为管理器将被替换。我想“内容”应该由可调用的@property 给出。 'content' 是一个只读属性,并添加了一个表示文件名的新字段。比自定义管理器简单得多!
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 2019-07-28
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多