Django user.save()方法

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",

我正在处理两个遗留数据库,mysql存储所有数据,mongodb只存储图像。 我想实现这样一种方法,当用户保存表单时,表单中有数据和图像——数据应该存储在mysql中,就像现在一样,并将图像存储到mongodb中。mysql存储了存储在mongodb中的图像的引用id,因此我需要为mysql生成一个引用id

因为在mongodb中存储图像需要一些额外的工作,因为在我的例子中它是以块的形式存储的

  {
    "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']