我如何分配一个值给一个模型字段,它是两个其他模型字段的连接?



我正在开发一个预订系统作为我的投资组合的一部分。它允许用户(公司)预定将在特定日期发送到配送中心(DC)的交付时间。时间。

Models.py

from django.db import models
from django.utils import timezone
from django.urls import reverse
import datetime as dt
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.DateTimeField()
delivery_time = models.TimeField()
booking_number = models.CharField(max_length=50)
def __str__(self):
self.booking_number = # How to concatenate delivery_date and delivery_time?
return self.booking_number
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','booking_date','booking_time')
widgets = {'delivery_date':DatePickerInput(options={"daysOfWeekDisabled":[0,6]}),
'delivery_time':forms.Select(choices=HOUR_CHOICES)}

我要做的是为booking_number字段分配一个值,该字段是delivery_date和delivery_time字段的连接。

因此,如果客户能够在要求的交付日期成功预订一个位置&时间,一个唯一的预订号码生成按上述。

我该怎么做?如果可能的话,我希望格式为"DDMMYYYYHHMM"或";DD-MM-YYYY-HH-MM"

如果客户书一个交货日期6-Oct和交货时间为07:00分配的预订号应为"061020210700"。

谢谢!

您可以覆盖模型的save方法并使用标准字符串格式:

class Booking(models.Model):
# ...
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)

顺便说一下,对delivery_date使用DatetimeField使额外的时间字段变得多余,因为datetime字段已经保存了时间信息。