我的 django 表单如何获取当前用户名和电子邮件并将它们提交到另一个数据库表中?

Posted

技术标签:

【中文标题】我的 django 表单如何获取当前用户名和电子邮件并将它们提交到另一个数据库表中?【英文标题】:How can my django form grab current username and email and submit them into another database table? 【发布时间】:2021-11-22 00:35:46 【问题描述】:

在我的 django 项目中,我有一个表单 VisitorRegForm,它收集了 scanned_idbody_temp 并将数据提交到我的数据库表 ClinicalData,因为当前用户已经登录,我怎样才能使这个表单还可以获取当前登录用户的usernameemail(注意:usernameemail 都是从内置的 django 用户模型创建的)并提交这四个项目: 'scanned_id', 'body_temp', 'username', 'email'进数据库表ClinicalData

不要介意缺少的细节和输入,表单可以工作并且可以提交'scanned_id', 'body_temp'。帮助我以最简单的方式提交这四个项目:'scanned_id', 'body_temp', 'username', 'email' 查看以下文件中显示的详细信息: 哪里应该更容易实现这一点;在views.py 或模板文件中?

forms.py

class VisitorRegForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']


class ScannerForm(ModelForm):
   class Meta:
      model = ClinicalData
      fields = ['scanned_id', 'body_temp']

models.py

class ClinicalData(models.Model):
    ...
    scanned_id = models.CharField(verbose_name="Scanned ID", max_length=50, null=True)
    body_temp = models.DecimalField(verbose_name="Body Temperature", max_digits=3, decimal_places=1, null=True)
    username = models.CharField(verbose_name="Facility Name", max_length=200, null=True)
    email = models.EmailField(verbose_name="Visitor Email", max_length=200, null=True)
    ...

views.py

我假设我可能在视图中需要两个变量来帮助我喜欢我已经注释掉的那些,如果它应该从这里开始,请帮助我应该如何成功:

@login_required(login_url='login')
def scanEnter(request):

    #grab_username = function_to_grab_current_logged_in_username_HELP_ME_HERE
    #grab_email = function_to_grab_current_logged_in_user_email_HELP_ME_HERE

    form = ScannerForm(request.POST)
    if request.method == 'POST':
        form = ScannerForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('scanenter')
    context = 'form': form
    return render(request, 'scan_enter_fac.html', context)

scan_enter_fac.html

<form action="" method="post">
    % csrf_token %
    <div class="">scanned_id<input type="text" id="multiple" class="form-control" placeholder="or Type ID here; e.g: ACCTS-147" name="scanned_id"></div>
    <div class="">body_temp<input type="text" class="form-control" placeholder="e.g: 36.5" name="body_temp"></div>
    <button type="submit" class="btn btn-danger btn-block">Submit</button>
</form>

【问题讨论】:

【参考方案1】:

views.py:

@login_required(login_url='login')
def scanEnter(request):

    #grab_username = function_to_grab_current_logged_in_username_HELP_ME_HERE
    #grab_email = function_to_grab_current_logged_in_user_email_HELP_ME_HERE

    form = ScannerForm(request.POST)
    if request.method == 'POST':
        form = ScannerForm(request.POST)
        if form.is_valid():
            form = form.save(commit=False)
            form.username = request.user.username #new
            form.email = request.user.email #new
            form.save()
            
            return redirect('scanenter')
    context = 'form': form
    return render(request, 'scan_enter_fac.html', context)

scan_enter_fac.html

<form action="" method="post">
    % csrf_token %
    <div class=""> form.scanned_id </div>
    <div class=""> form.body_temp </div>
    <button type="submit" class="btn btn-danger btn-block">Submit</button>
</form>

【讨论】:

您好@amadou sow 感谢您的快速回复,就在这里: form = forme.save(commit=False) 我想应该是这样 form = forme.save(commit=False) 一个错字关于form.save的“forme.save”对吗? @ClydeMulenga 是的,您对错字很抱歉)。我已经编辑了我的答案 @ClydeMulenga 回答了你的问题吗? 非常感谢 @amadou sow 让我试试看,我会尽快通知您。

以上是关于我的 django 表单如何获取当前用户名和电子邮件并将它们提交到另一个数据库表中?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在管理表单中获取当前用户?

如何在需要的基本 Django 用户模型中获取电子邮件字段?

如何在不完整的 Django 表单字段中获取用户输入?

如何从 django 表单在我的电子邮件中发送信息? - 姜戈 2

将变量从视图传递到表单 Django

Django formset 设置当前用户