Правильно ли я передаю объект пользователя в ModelForm с помощью CreateView?

Я разрабатываю портал бронирования, который позволяет вошедшему в систему пользователю создавать слот доставки (бронирование).

models.py

from django.db import models
from django.utils import timezone
from django.urls import reverse
from django.contrib.auth.models import User


# Create your models here.
class Booking(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    qty_plts = models.PositiveSmallIntegerField(default=1)
    cbm = models.PositiveSmallIntegerField(default=1)
    created_date = models.DateTimeField(default=timezone.now())
    delivery_date = models.DateField()
    delivery_time = models.TimeField()
    booking_number = models.CharField(max_length=50,null=False)

    # def save(self, **kwargs):
    #    if not self.booking_number:
    #        self.booking_number = f"{self.delivery_date:%Y%m%d}{self.delivery_time:%H%M}"
    #    super().save(**kwargs)

    def get_absolute_url(self):
        return reverse("booking_detail",kwargs={'pk':self.pk})

forms.py

from django import forms
from bookmyslot.models import Booking
from bootstrap_datepicker_plus import DatePickerInput
import datetime as dt

HOUR_CHOICES = [(dt.time(hour=x), '{:02d}:00'.format(x)) for x in range(7, 13)]

class BookingForm(forms.ModelForm):

    class Meta:
        model = Booking
        fields = ('qty_plts','cbm','delivery_date','delivery_time')
        widgets = {'delivery_date':DatePickerInput(options={"daysOfWeekDisabled":[0,6]}),
                    'delivery_time':forms.Select(choices=HOUR_CHOICES)}

views.py

from django.shortcuts import render

# Create your views here.
from .models import Booking
from django.urls import reverse,reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import (ListView,DetailView,CreateView,UpdateView,DeleteView,TemplateView)
    
class AboutView(TemplateView):
    template_name = 'about.html'

class BookingCreate(LoginRequiredMixin,CreateView):
    login_url = '/login'
    redirect_field_name = 'bookmyslot/booking_detail.html'

    model = Booking
    form_class = BookingForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.user.booking_number = f"{self.request.user.delivery_date:%Y%m%d}{self.request.user.delivery_time:%H%M}"
        self.object.save()
        return super().form_valid(form)

Я хочу, чтобы номер бронирования генерировался во время создания формы, для вошедшего пользователя, на основе даты_доставки и времени_доставки, которые он выбирает в форме.

Выглядит ли вышеприведенное правильно?

Вернуться на верх