【问题标题】:django form is not picking data which is already in databasedjango 表单没有选择已经在数据库中的数据
【发布时间】:2021-10-02 01:47:51
【问题描述】:

如何将我的表单更新为

form.instance.users = request.user

但是如果我在终端上打印 request.user 它不起作用,它会打印当前登录用户的用户名。

同样在这个表单中,我想从该用户那里挑选现有数据以显示在表单中以更新它。 保存表单按钮返回 HttpResponse 保存成功但数据没有存入数据库。

models.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)

forms.py

​​>
class BasicDetailsForm(forms.ModelForm):

class Meta:
    model = BasicDetails
    fields = '__all__'
    exclude = ['users']

class EducationForm(forms.ModelForm):

class Meta:
    model = Education
    fields = '__all__'
    exclude = ['users']

views.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})

【问题讨论】:

  • 从表单中排除用户字段的目的是什么?
  • 我希望它自动获取用户

标签: django django-models django-views django-forms


【解决方案1】:
 if request.method =="POST":
    ef = EducationForm(request.POST)
    ef.instance.username = request.user.username
    ef.instance.users_id = request.user.id

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 2017-06-04
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多