簡體   English   中英

如何為 model 字段賦值,該字段是其他兩個 model 字段的串聯?

[英]How do I assign a value to a model field that is the concatenation of two other model fields?

我正在開發一個預訂系統作為我的投資組合的一部分。 它允許用戶(公司)預訂將在特定日期和時間送達配送中心 (DC) 的交貨時間段。

模型.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”

因此,如果客戶預訂交貨日期為 10 月 6 日,交貨時間為 07:00,則分配的預訂編號應為“061020210700”。

謝謝!

您可以覆蓋 model 的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)

在旁注中,將DatetimeField用於delivery_date會使附加時間字段變得多余,因為 datetime 字段已經包含時間信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM