在Django中使用数据库视图

问题描述 投票:3回答:2

我看到问题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
2个回答
3
投票

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

管理

Options.managed

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

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

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

  1. 如果未声明,则将自动主键字段添加到模型。为避免混淆以后的代码阅读器,建议在使用非托管模型时指定您正在建模的数据库表中的所有列。
  2. 如果具有managed = False的模型包含指向另一个非托管模型的ManyToManyField,则也不会创建多对多连接的中间表。但是,将创建一个托管模型和一个非托管模型之间的中间表。 如果需要更改此默认行为,请将中间表创建为显式模型(根据需要使用托管集),并使用ManyToManyField.through属性使关系使用自定义模型。

对于涉及托管= False的模型的测试,由您来确保在测试设置中创建正确的表。


1
投票

id = models.IntegerField(primary_key = True)

© www.soinside.com 2019 - 2024. All rights reserved.