限制外键的数量,每个外键指的是第

2024-10-01 00:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的应用程序中有两种型号:Car和CarAvailability

class Car(Model):
    availability = ForeignKey(CarAvailability)
class CarAvailability(Model):
    WEEKDAYS = (
        ('monday', 'Monday'),
        ('tuesday', 'Tuesday'),
        ('wednesday', 'Wednesday')
        # ... basically all the days of the week
    )
    day = CharField(max_length=20, choices=WEEKDAYS)

我有哪些选项可以将外键(availability属性)的数量限制为最多7个,并确保每个工作日只有一个。 我不知道我在这里说的是否够清楚,如果有什么要告诉我的


Tags: the应用程序modelcarclassavailability型号monday
1条回答
网友
1楼 · 发布于 2024-10-01 00:24:18

我认为您可以通过使用两个模型CarDayOfWeek来改进建模,并将其建模为ManyToManyField

class DayOfWeek(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

class Car(models.Model):
    days = models.ManyToManyField(DayOfWeek)

另一种建模方法是使用整数,并将其编码为“位字符串”:

from enum import IntFlag

class Day(IntFlag):
    MONDAY = 1
    TUEDAY = 2
    WEDNESDAY = 4
    THURSDAY = 8
    FRIDAY = 16
    SATURDAY = 32
    SUNDAY = 64
class Car(models.Model):
    days = models.IntegerField()

然后,您可以将其编码为:

Car.object.create(days=Day.MONDAY|Day.FRIDAY)

对周一和周五有车的情况进行编码

相关问题 更多 >