我看到问题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。
答案 0 :(得分:3)
试试这个: http://docs.djangoproject.com/en/dev/ref/models/options/#managed
管理
Options.managed
Django 1.1中的新功能:请参阅发行说明
默认为True,这意味着Django将在syncdb中创建相应的数据库表,并将其作为重置管理命令的一部分删除。也就是说,Django管理数据库表的生命周期。
如果为False,则不会对此模型执行数据库表创建或删除操作。如果模型表示通过其他方式创建的现有表或数据库视图,则此选项非常有用。当托管为False时,这是唯一的区别。模型处理的所有其他方面与正常情况完全相同。这包括
- 如果未声明,则将自动主键字段添加到模型。为避免以后的代码阅读器混淆,建议在使用非托管模型时指定您正在建模的数据库表中的所有列。
- 醇>
如果managed = False的模型包含指向另一个非托管模型的ManyToManyField,则也不会创建多对多连接的中间表。但是,将创建一个托管模型和一个非托管模型之间的中间表。
如果您需要更改此默认行为,请将中间表创建为显式模型(根据需要使用托管集),并使用ManyToManyField.through属性使关系使用您的自定义模型。
对于涉及托管= False的模型的测试,由您来确保在测试设置中创建正确的表。
答案 1 :(得分:1)
id = models.IntegerField(primary_key = True)