【发布时间】:2021-06-25 09:57:45
【问题描述】:
我运行以下查询以在我的 SQLite 数据库中创建数据库视图:
CREATE VIEW customerview AS
SELECT
a.id
, name
, email
, vat
, street
, number
, postal
, city
, country
, geo_lat
, geo_lon
, customer_id
, is_primary
FROM customerbin_address a
, customerbin_customer b
WHERE b.id = a.customer_id
AND a.is_primary = 1
在 models.py 我添加了模型:
class Customerview(models.Model):
name = models.CharField(max_length=100, db_column='name')
email = models.EmailField(unique=True, db_column='email')
vat = VATNumberField(countries=['NL', 'BE', 'FR', 'DE', 'UK'], blank=True, null=True, db_column='vat')
street = models.CharField(max_length=100, db_column='street')
number = models.IntegerField(null=True, db_column='number')
postal = models.IntegerField(null=True, db_column='postal')
city = models.CharField(max_length=100, db_column='city')
country = CountryField(db_column='country')
is_primary = models.BooleanField(null=False, db_column='is_primary')
geo_lat = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True, db_column='geo_lat')
geo_lon = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True, db_column='geo_lon')
class Meta:
managed = False
db_table = 'customerview'
在 admin.py 中我更改了列表:
@admin.register(models.Customerview)
class CustomerviewAdmin(admin.ModelAdmin):
list_display = ('name', 'email', 'vat', 'street', 'number', 'postal', 'city', 'country', 'is_primary', 'geo_lat', 'geo_lon')
readonly_fields = ('name', 'email', 'vat', 'street', 'number', 'postal', 'city', 'country', 'is_primary', 'geo_lat', 'geo_lon',)
如何以编程方式在我的应用程序中添加带有上述查询的数据库视图?
【问题讨论】:
-
如果你有
managed = False,这意味着你不能从你的models.py修改表,包括创建索引。 -
@iklinac 如何在 models.py 中执行此操作?我有两个不同的模型(客户、地址),模型 Customerview 是一个将客户和地址模型与 WHERE 语句相结合的模型。我只需要一个方法,我可以从我的代码中创建一个数据库视图。
-
@MichielB 这并不是要被更改,它只是为了在该模型中显示查询,然后将其导出到 xlsx 或 csv。
标签: django django-models django-admin django-database