【问题标题】:Django form validation fails when using second unmanged database / How to use 2nd DB for form validation?使用第二个未管理的数据库时,Django 表单验证失败/如何使用第二个数据库进行表单验证?
【发布时间】:2020-11-14 11:41:34
【问题描述】:

我在我的 django 项目中使用了两个数据库:

settings.py

DATABASES = {
"default": {
    "ENGINE": "django.db.backends.sqlite3",
    "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
},
"2ndDB": {
    "ENGINE": "sql_server.pyodbc",
    "NAME": "2nddb-sqldb",
    "USER": CRED["user"],
    "PASSWORD": CRED["password"],
    "HOST": "2ndserver-sqlsrv.database.windows.net",
    "PORT": 1433,
    "OPTIONS": {"driver": "ODBC Driver 17 for SQL Server",},
},

在我看来,我尝试验证我的表单:

views.py

def registration(request):
    if request.method == "POST":
        form = RegistrationForm(request.POST, user=request.user.get_username())
        if form.is_valid():

forms.py

class RegistrationForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_method = "post"
        self.helper.add_input(Submit("submit", "OK"))

    class Meta:
        model = Registration
        fields = (
            "uuid",
            "xyz",
        )

在尝试验证非托管数据库中模型的 pk 的唯一约束时失败:

models.py

class Registration(models.Model):

uuid = models.UUIDField(primary_key=True, verbose_name="UUID")

class Meta:
    db_table = "xyz"
    managed = False

很漂亮,它试图访问主数据库,但显然找不到表。 (这是我收到的错误。)我知道在保存表单或使用“使用”选项进行查询时如何使用第二个数据库。我不知道如何通过验证来完成这项工作。

【问题讨论】:

  • 你是如何设置你的表路由的?

标签: django database django-forms


【解决方案1】:

我误读了你的问题。您正在寻找的是一个数据库路由器:https://docs.djangoproject.com/en/3.0/topics/db/multi-db/#automatic-database-routing

您配置这些以将一些请求路由到您的第二个数据库。您可以在 django 文档中使用路由器显示,但您可以使用:route_app_labels = {'yourapp', 'registration'} 而不是 route_app_labels = {'auth', 'contenttypes'}(并更改对您的数据库的相关引用)。

【讨论】:

  • 干杯,我刚刚在阅读您的问题后再次阅读有关自动路由的信息。我会试试这个。以为我可以这样: object = Registration.objects.using("datadictionary").get(uuid=uuid) form = ConfirmForm(instance=object, connstring=request.session["conn_string"] ) 对于表单也一样,但也许这不是这样做的方式。
  • 谢谢你的工作。显然,“使用”的方法根本不是很明智。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
相关资源
最近更新 更多