【问题标题】:Use database view in Django在 Django 中使用数据库视图
【发布时间】:2010-11-05 17:24:28
【问题描述】:

我看到了can i use a database view as a model in django 的问题,并在我的应用程序中进行了尝试,但没有奏效。

我手动创建了一个名为"vi\_topics" 的视图,它有"id" 列,但我一直收到错误消息,即使我明确添加了“id”字段,说

“没有这样的列:vi_topics.id”

这是我的模型的定义,名为Vitopic

from django.db import models

class Vitopic(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author_name = models.CharField(max_length=200)
    author_email = models.CharField(max_length=200)
    view_count = models.IntegerField(default=0)
    replay_count = models.IntegerField(default=0)
    tags = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'vi_topics'

注意:我使用 sqlite3。

【问题讨论】:

    标签: database django-models


    【解决方案1】:

    试试这个: http://docs.djangoproject.com/en/dev/ref/models/options/#managed

    管理

    Options.managed

    Django 1.1 中的新功能:请参阅发行说明

    默认为 True,这意味着 Django 将在 syncdb 中创建适当的数据库表,并将它们作为重置管理命令的一部分删除。也就是说,Django 管理数据库表的生命周期。

    如果为 False,则不会对此模型执行任何数据库表创建或删除操作。如果模型表示现有表或已通过其他方式创建的数据库视图,这将很有用。这是 managed 为 False 时的唯一区别。模型处理的所有其他方面与正常情况完全相同。这包括

    1. 如果不声明,则向模型添加自动主键字段。为避免以后的代码读者混淆,建议在使用非托管模型时指定您正在建模的数据库表中的所有列。
    2. 如果 managed=False 的模型包含指向另一个非托管模型的 ManyToManyField,则也不会创建多对多连接的中间表。但是,将创建一个托管模型和一个非托管模型之间的中间表。

      如果您需要更改此默认行为,请将中间表创建为显式模型(根据需要使用托管集)并使用 ManyToManyField.through 属性使关系使用您的自定义模型。

    对于涉及 managed=False 的模型的测试,您需要确保创建正确的表作为测试设置的一部分。

    【讨论】:

      【解决方案2】:

      id = models.IntegerField(primary_key=True)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-14
        • 2021-10-21
        • 1970-01-01
        • 2018-11-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多