我看到了问题我可以在 django 中使用数据库视图作为模型吗 https://stackoverflow.com/questions/507795/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'
Note: 我用的是sqlite3。
尝试这个:http://docs.djangoproject.com/en/dev/ref/models/options/#management http://docs.djangoproject.com/en/dev/ref/models/options/#managed
managed
选项管理
Django 1.1 中的新增功能:请参阅发行说明
默认为True,这意味着Django将在syncdb中创建适当的数据库表,并作为重置管理命令的一部分将其删除。也就是说,Django 管理数据库表的生命周期。
如果为 False,则不会对该模型执行任何数据库表创建或删除操作。如果模型表示现有表或通过其他方式创建的数据库视图,这非常有用。这是管理为 False 时的唯一区别。模型处理的所有其他方面与正常情况完全相同。这包括
- 如果您未声明,则将自动主键字段添加到模型中。为了避免后来的代码读者感到困惑,建议在使用非托管模型时指定您正在建模的数据库表中的所有列。
-
如果 Managed=False 的模型包含指向另一个非托管模型的 ManyToManyField,则也不会创建多对多联接的中间表。但是,将创建一个托管模型和一个非托管模型之间的中间表。
如果您需要更改此默认行为,请将中间表创建为显式模型(根据需要使用托管集)并使用 ManyToManyField.through 属性使关系使用您的自定义模型。
对于涉及包含 Managed=False 的模型的测试,您需要确保在测试设置过程中创建正确的表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)