gpt4 book ai didi

python - 在 django 中自动给出职位名称

转载 作者:行者123 更新时间:2023-12-01 03:01:55 24 4
gpt4 key购买 nike

我正在使用 Django 构建一个巴士预订网站。我的 table “座位”中有一个属性位置。它通过ForeignKey链接到总线(表)。每当创建总线时,都会创建等于总线容量的座位实例(容量由用户在总线表中定义)。我想命名诸如 1_1、1_2、1_4、1_5、2_1、2_2、2_4、2_5 等位置。其中下划线之前的第一个数字代表行,下划线之后的数字代表列。我没有使用 3,因为它是过道。

this is my models.py

class Seat(models.Model):
class Meta:
verbose_name_plural = "Seat"
id = models.AutoField(primary_key=True,)
position = models.CharField(max_length=4)
bus = models.ForeignKey(Bus)
status = models.CharField(max_length=20, choices=(('available', 'available'), ('reserved', 'reserved'), ('unavailable', 'unavailable'),), default='Available')

def __str__(self):
return '{0}-{1}-{2}'.format((self.bus),(self.id),(self.status))

@receiver(post_save, sender=Bus)
def create_seats(sender, instance, created, **kwargs):
if created:
for seat in range (0, int(instance.capacity)):
instance.seat_set.create( )

This is how the naming of position is done

enter image description here

正如您所看到的,它的中间是空的,因此第三列未被使用。我的问题是如何根据图表自动命名位置(就像我在创建总线对象时创建座位一样),而不必进入单独的座位对象并命名位置。我希望你能明白我的问题。如果您需要更多信息,请告诉我。

最佳答案

此答案假设巴士可以有不同的座位布局,这意味着您需要为每种巴士类型定义座位模式。

最基本的方法是将它们定义为常量,即二维列表/数组,输入 1 表示有座位,0 表示没有座位:

#seating_patterns.py

BUS_1 = [
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 1, 0, 0, 0],
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 1, 1, 1, 1],
]

BUS_2 = [etc]

SEATING_ARRAYS = {'BUS_1': BUS_1, 'BUS_2': BUS_2}

为了使其更易于维护,您可以创建一个 SeatingPattern 模型,例如使用 ArrayField(如果您可以选择)。

否则将座位数组导入到您的模型文件中:

# models.py
from .seating_patterns import SEATING_ARRAYS

并向您的巴士模型添加一个 Seating_pattern 字段,其中包含巴士的选择元组:

class Bus(models.Model):

SEATING_PATTERNS = (
('BUS_1', 'BUS_1'),
('BUS_2', 'BUS_2'),
)

seating_pattern = models.CharField(choices=SEATING_PATTERNS, max_length=50)

并在 post_save 信号中创建正确的格式输出(1_1、1_2 等):

if created:
seating_pattern = SEATING_ARRAYS[instance.seating_pattern]
for row,seats in enumerate(seating_pattern):
for pos,seat in enumerate(seats):
if seat:
Seat.objects.create(
bus=instance,
position="{}_{}".format(str(row+1), str(pos+1))
)

关于python - 在 django 中自动给出职位名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43724155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com