首页 > 解决方案 > 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})

标签: djangodjango-modelsdjango-viewsdjango-forms

解决方案


 if request.method =="POST":
    ef = EducationForm(request.POST)
    ef.instance.username = request.user.username
    ef.instance.users_id = request.user.id

通过这种方式,我可以将用户 ID 传递给基本详细信息,表单将成功上传到数据库


推荐阅读