Правильно ли я передаю объект пользователя в 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)
Я хочу, чтобы номер бронирования генерировался во время создания формы, для вошедшего пользователя, на основе даты_доставки и времени_доставки, которые он выбирает в форме.
Выглядит ли вышеприведенное правильно?