保存 django 表单时添加附加数据

问题描述 投票:0回答:2

我正在为我的第一个 django 应用程序寻求一些帮助,并且我是编程新手。我有以下情况:

型号:

class save_table(models.Model):
   name=models.CharField(max_length=100)
   UniqueuserID = models.CharField(max_length=7)
   UserLocation = models.CharField(max_length=100)
   UserLead = models.CharField(max_length=50)

   def __str__(Self):
      return self.UniqueuserID

class data_table(models.Model):
   UniqueuserID = models.CharField(max_length=7)
   name=models.CharField(max_length=100)
   UserLocation = models.CharField(max_length=100)
   UserLead = models.CharField(max_length=50)

形式:

class save_table_form(forms.ModelForm):
   
   class Meta:
      model = save_table
      fields = ('UniqueuserID')

   def __init__(self,*args,**kwargs):
      super(save_table_form,self).__init__(*args,**kwargs)

用户将添加到表单的每个用户 ID 将在第二个模型中具有相应的数据条目,我想将附加数据与表单一起保存。但是我没有使用外键,因为我不希望 save_table 中保存的模型数据根据 data_table 中的更改而更改。我可以在保存表单之前将附加数据添加到表单中吗?

if form.is_valid():
   form.save()

请帮忙..

django django-forms
2个回答
0
投票

是的,您可以在保存表单时添加其他数据! 覆盖类save_table_form中的保存方法: 像这样:

class save_table_form(forms.ModelForm):
    def save(self, commit=True):
        user_id = self.cleaned_data['id']
        user_photo = self.cleaned_data['photo']
        user_password = self.cleaned_data['password1']
        user = SysUser.objects.get(pk=user_id)
        user.username = self.cleaned_data['username']
        if user_password:
            user.set_password(self.cleaned_data['password1'])
        user.first_name = self.cleaned_data['first_name']
        user.mobile = self.cleaned_data['mobile']
        user.office_id = self.cleaned_data['office_id']
        if user_photo:
            user.image = user_photo
        user.save()
        user.user_permissions.clear()
        user.user_permissions.add(*self.cleaned_data['user_permissions'])
        print('data is saving')
        return user

0
投票

我使用了 Django UpdateView 泛型类。当我更新用户个人资料时,我也想设置

user.is_updated = True 

视图中的重写方法不起作用,所以:

def form_valid(self, form):
    user.is_updated = True
    user.save()
    return super().form_valid(form)

所以我使用了信号并且它有效

def user_update_usertype(sender, instance, created, **kwargs):
 if not created:
    if instance.is_updated == False:
        instance.is_updated = True
        instance.save()

post_save.connect(user_update_usertype, sender=User)
© www.soinside.com 2019 - 2024. All rights reserved.