我正在为我的第一个 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()
请帮忙..
是的,您可以在保存表单时添加其他数据! 覆盖类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
我使用了 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)