django - django 表单没有选择已经在数据库中的数据
问题描述
如何将我的表单更新为
form.instance.users = request.user
不起作用但是,如果我在终端上打印 request.user 它会打印当前登录用户的用户名。
同样在此表单中,我想从该用户那里选择现有数据以显示在表单中以更新它。保存表单按钮返回 HttpResponse 保存成功但数据未存储在数据库中。
模型.py
class BasicDetails(models.Model):
GENDERS = (
('M', 'Male'),
('F', 'Female'),
('O', 'Others'),
)
users = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=50, null=True, blank=True)
last_name = models.CharField(max_length=50, blank=True, null=True)
father_name = models.CharField(max_length=50, blank=True, null=True)
mother_name = models.CharField(max_length=50, blank=True, null=True)
date_of_birth = models.DateField(blank=True, null=True)
gender = models.CharField(max_length=1, choices=GENDERS)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.first_name+" "+ self.last_name
class Education(BasicDetails):
current_year = datetime.date.today().year
YEAR_CHOICES = [(r, r) for r in range(2000, datetime.date.today().year+2)]
course_name = models.CharField(max_length=100, blank=True, null=True)
university_board_name = models.CharField(
max_length=200, blank=True, null=True)
passing_year = models.IntegerField(
choices=YEAR_CHOICES, default=current_year, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(default=timezone.now)
表格.py
class BasicDetailsForm(forms.ModelForm):
class Meta:
model = BasicDetails
fields = '__all__'
exclude = ['users']
类 EducationForm(forms.ModelForm):
class Meta:
model = Education
fields = '__all__'
exclude = ['users']
视图.py
@login_required
def View(request):
education = EducationForm()
education.instance.users = request.user
if request.method =="POST":
print(request.user.id)
education = EducationForm(request.POST,instance=request.user)
if education.is_valid():
education.save(commit=True)
return HttpResponse("Saved Successfully")
else:
education = EducationForm()
return render(request, 'app/view.html',{'education':education})
解决方案
if request.method =="POST":
ef = EducationForm(request.POST)
ef.instance.username = request.user.username
ef.instance.users_id = request.user.id
通过这种方式,我可以将用户 ID 传递给基本详细信息,表单将成功上传到数据库
推荐阅读
- sql - 将数据从表中的行复制到同一表中的未来行
- c++ - 是否可以使用 QT 制作 2 面按钮?
- java - Spring boot @ExceptionHandler 将响应返回为 html
- jmeter - 将现有的 Beanshell 侦听器添加到每个新的 Jmeter 脚本
- android - 如何以编程方式获取 youtube 视频的观看次数和点赞次数
- android - 带有 PendingIntent 和 putExtra 的 Java 通知不起作用
- laravel - 如何使用嵌套模型加载 Laravel 并限制嵌套模型?
- openedx - 讲师仪表板中缺少 OpenEdX 的电子邮件选项卡?
- javascript - 用js根据其他单元格填表
- ios - 在 Swift 4 中从 uitextfields 将数据发布到服务器