好吧,问题是我有一个模型,其中的字段是唯一的。我要在帖子正文中输入用户的字段值,并希望通过模型形式将其保存到也在帖子正文中指定的数据库中。
# 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()
因为我以后可能还会添加只能通过表单进行检查的验证。