使用模型表格将数据保存在不同的数据库中

时间:2018-08-17 16:15:23

标签: python django

好吧,问题是我有一个模型,其中的字段是唯一的。我要在帖子正文中输入用户的字段值,并希望通过模型形式将其保存到也在帖子正文中指定的数据库中。

# models.py
class Type(models.Model):
    name = models.CharField(max_length=100, unique=True)
    created_at = models.DateTimeField(auto_now_add=True, editable=True)

    def __str__(self):
        return self.name

#forms.py
class TypeCreateForm(forms.ModelForm):
    class Meta:
        model = Type
        fields = "__all__"

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "default",
        'USER': 'root',
        'PASSWORD': 'abcd1234',
        'HOST': '0.0.0.0',
        "PORT": "3306"
    },
    'database1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "database1",
        'USER': 'root',
        'PASSWORD': 'abcd1234',
        'HOST': '0.0.0.0',
        "PORT": "3306"
    },
}

#views.py
def index(request):
    db_name=request.POST["db_name"]
    ob = TypeCreateForm(request.POST)
    for a in ob:
        if a.errors:
            print(a.errors.as_text())

    ob=ob.save(commit=False)
    ob.save(using=db_name)

我搜索了几个类似的关于保存到默认数据库以外的数据库的问题。有人建议commit=False可以与关键字参数一起用于保存。

在某些答案中,他们建议对字段的查询集进行修改。 但是我不认为这对我有用,因为在我的模型中也有一个唯一约束,所以当我在保存之前打印错误时,即使该类型存储在默认数据库中,即使我可能想保存在其中,它也会显示唯一约束失败。第二个数据库。

没有任何方法可以使我在初始化表单对象时也指定数据库名称,并将其保存到该数据库中,并且错误也将与所选数据库相对应

我也不能使用Type.objects.using(db_name).create() 因为我以后可能还会添加只能通过表单进行检查的验证。

0 个答案:

没有答案