【问题标题】:Django - Get database alias from QuerySetDjango - 从 QuerySet 获取数据库别名
【发布时间】:2015-05-19 15:49:08
【问题描述】:

我想使用方法在ImageField 字段中设置动态upload_to。类似this:

def content_file_name(instance, filename):
    return '/'.join(['content', instance.database_alias, filename])

class Content(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to=content_file_name)

更新

我不知道这是否有用,但我正在使用 Django 1.7.1

我正在用上面的模型做一个测试:

models.py

from django.db import models


def content_file_name(instance, filename):
    print "INSTANCE(%s)" % instance._state.db
    return "/".join(instance._state.db, filename)


class Cliente(models.Model):

    class Meta:
        verbose_name = "Cliente"
        verbose_name_plural = "Clientes"

    Nombre = models.CharField("Nombre", max_length=50)
    Foto = models.ImageField(upload_to=content_file_name)

    def __unicode__(self):
        return "Hello World"

    MY_FIELDS = ["Nombre", "Foto"]

我在提交表单时进入终端:

终端

INSTANCE(None)
[19/May/2015 21:19:55] "POST /default/clientes/new HTTP/1.1" 500 168242

另一种选择是进行导入并获取数据库别名,但我还不知道从哪里得到它。

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    instance._state.db 应该返回数据库别名。

    【讨论】:

    • 也许这适用于另一个 django 版本,但不要在 django 1.7.1 中或至少不适用于ImageFields
    【解决方案2】:

    在 Django 2.2.14 中,您可以使用 instance.db 访问数据库别名

    qryset_employee = Employees.objects.using('OrgChartDatabase')
    print(qryset_employee.db) ## Prints 'OrgChartDatabase'
    

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2016-03-12
      • 2011-04-14
      • 2021-05-06
      • 1970-01-01
      • 2020-11-29
      • 2022-01-10
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多