问题是我有一个模型,其中一个字段是唯一的。我在post body中输入来自用户的字段值,并希望通过模型表单将其保存在post body中指定的数据库中。
# 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
将与save一起使用关键字参数。
在某些回答中,他们建议对字段的查询集进行修改。
但是我不认为这对我有用,因为在我的模型中有一个唯一的约束,所以当我在保存之前打印错误时,如果该类型存储在default db中,即使我想保存在第二个数据库中,也会显示唯一约束失败。
有没有任何方法,我可以这样做,当启动一个窗体对象,我也指定了数据库名称,它将保存到该数据库和错误也会相应地来选择数据库
我也不能用
Type.objects.using(db_name).create()
因为我以后可能还会添加只能通过表单检查的验证。