django - 如何使用一个 django 表单更新两个模型
问题描述
我正面临 django 表单的一个问题
这是我的模型:
class User(models.Model):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class UserProfile(AuditFields):
user = models.ForeignKey(User, on_delete=models.CASCADE)
designation = models.CharField(max_length=200, blank=True)
contact_number = models.CharField(max_length=20, blank=True)
team = models.CharField(max_length=200, blank=True)
manager = models.CharField(max_length=200, blank=True)
joining_date = models.DateField(default=datetime.now)
我需要创建一个表单来编辑当前用户的个人资料详细信息
这是我的表格。但它是一个模型表单,因此只能从用户配置文件表中获取详细信息
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
如何从 User 表中获取 first_name , last_name 并保存
解决方案
只需将字段添加为CharField
表单,并使用cleaned_data
属性获取数据并保存:
class UserProfileForm(forms.ModelForm):
first_name = forms.CharField(max_length=30,required=True)
last_name = forms.CharField(max_length=30,required=True)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance:
self.fields['first_name'].initial = self.instance.user.first_name
self.fields['last_name'].initial = self.instance.user.last_name
class Meta:
model = UserProfile
exclude = ['user']
def save(self, commit=False):
instance = super().save(commit=True)
user = instance.user
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return instance
推荐阅读
- r - R circlize 包:文本绘图问题
- c# - 如何将数据从excel文件外部传递到specflow(3.7版)功能文件?
- libreoffice-calc - LibreOffice Calc:单元格列表中最大的 n 个总和
- python - 我想得到一个 1-7 以内的四位数
- c# - 如何在 C# 中的模板中设置选项卡值(需要在 Docusign 中设置值 PDF 模板)
- java - Oracle 12C RAC DB 在使用 DB 链接连接时抛出 ORA-02396 错误
- java - 为什么 Windows 服务无法从共享文件夹中获取文件
- gitlab - 警告:将工件作为“存档”上传到协调器...失败 id=1515 responseStatus=500 内部服务器错误状态=500
- reactjs - 如何在数据中搜索其第一个字符与火存储中的数据字段匹配的特定字段值
- ios - swift 我想更改搜索栏背景颜色为白色,黑色边框