Home > OS >  How can my django form grab current username and email and submit them into another database table?
How can my django form grab current username and email and submit them into another database table?

Time:10-01

In my django project I have a form VisitorRegForm which collects scanned_id and body_temp and submits data to my database table ClinicalData, since the current user is already logged in, how can I make this form to also be able grab current logged in user's username and email (Note: username and email were both created from the built-in django User model) and submit these four items: 'scanned_id', 'body_temp', 'username', 'email' into the database table ClinicalData?

Don't mind the missing details and inports, the form works and am able to submit 'scanned_id', 'body_temp'. Help me on the easiest way I will be able to submit these four items: 'scanned_id', 'body_temp', 'username', 'email' looking at the details shown in the files below: Where should it be easier to achieve this; in the views.py or the template file?

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

Am assuming I might need like two variables here in the views that should help me like the ones i've commented out, if it should start from here, help me how it should succeed:

@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>

CodePudding user response:

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>
  • Related