Django user.save()方法
我正在处理两个遗留数据库,mysql存储所有数据,mongodb只存储图像。 我想实现这样一种方法,当用户保存表单时,表单中有数据和图像——数据应该存储在mysql中,就像现在一样,并将图像存储到mongodb中。mysql存储了存储在mongodb中的图像的引用id,因此我需要为mysql生成一个引用id 因为在mongodb中存储图像需要一些额外的工作,因为在我的例子中它是以块的形式存储的Django user.save()方法,django,django-models,django-rest-framework,django-views,django-forms,Django,Django Models,Django Rest Framework,Django Views,Django Forms,我正在处理两个遗留数据库,mysql存储所有数据,mongodb只存储图像。 我想实现这样一种方法,当用户保存表单时,表单中有数据和图像——数据应该存储在mysql中,就像现在一样,并将图像存储到mongodb中。mysql存储了存储在mongodb中的图像的引用id,因此我需要为mysql生成一个引用id 因为在mongodb中存储图像需要一些额外的工作,因为在我的例子中它是以块的形式存储的 { "contentType": "png",
{
"contentType": "png",
"md5": "20481950baf03b7f467f824739eb68c4",
"chunks": [
{
"data": {
"$binary": {
"base64": "binarydata",
"subType": "00"
}
}
},
{
"data": {
"$binary": {
"base64": "binarydata",
"subType": "00"
}
}
}
]
}
]
因此,我需要将图像转换为base64等等,因此我希望有一个类似于save的方法,为mysql图像id创建一个uuid,然后使用这个uuid将其与处理后的图像一起发送到mongodb
这是我的用户模型
class TbUser(AbstractBaseUser, PermissionsMixin):
id = models.CharField(primary_key=True, max_length=32, default=uuid.uuid4)
username = models.CharField(
max_length=40, blank=True, null=True, unique=True, db_column='usname')
password = models.CharField(
max_length=255, blank=True, null=True, db_column='dj_psword')
image_id = models.CharField(
max_length=40, blank=True, null=True)
sex = models.IntegerField(blank=True, null=True, choices=[
(0, 'Male'), (1, 'Female')])
user_face_img_md5 = models.CharField(
max_length=40, blank=True, null=True) # this is the image id
role = models.ForeignKey(TbRole, on_delete=models.CASCADE)
department = models.ForeignKey(TbDepartment, on_delete=models.CASCADE)
is_superuser = models.BooleanField(
default=False, blank=True, null=True, db_column='default_super')
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = TbUserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class Meta:
managed = False
db_table = 'tb_user'
def __str__(self):
return '%s' % self.username
另外,在forms.py中,我需要添加一个可以在save方法中读取的图像字段
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = TbUser
def clean_username(self):
username = self.cleaned_data["username"]
try:
TbUser.objects.get(username=username)
except TbUser.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class TbUserRegisterForm(CustomUserCreationForm):
email = forms.EmailField()
class Meta:
model = TbUser
fields = ['username', 'email', 'cellphone', 'empno', 'real_name', 'nfc_id',
'sex', 'role', 'department', 'password1', 'password2']
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = TbUser
def clean_username(self):
username = self.cleaned_data["username"]
try:
TbUser.objects.get(username=username)
except TbUser.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class TbUserRegisterForm(CustomUserCreationForm):
email = forms.EmailField()
class Meta:
model = TbUser
fields = ['username', 'email', 'cellphone', 'empno', 'real_name', 'nfc_id',
'sex', 'role', 'department', 'password1', 'password2']