数据库允许在Django中重复输入外键

2024-10-04 03:28:50 发布

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

我想允许外键的日期重复输入。在Django有什么方法我可以做到吗?我们将非常感谢你的帮助。非常感谢。例如:我有一个用户“X”和“Y”,我想存储工作状态,例如(我的工作进入时间、我的工作退出时间),但在同一日期,这两个用户只能执行一次

models.py

class TimesheetDetails(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="timesheet",null="True")
    date = models.DateField(max_length = 10,unique=True)
    day = models.CharField(max_length = 10)
    startTime = models.CharField(max_length =10)
    endTime = models.CharField(max_length =10)
    breakTime = models.CharField(max_length=3)
    normalTime = models.FloatField(max_length=10)
    overTime = models.FloatField(max_length = 10)
    holidayTime = models.FloatField(max_length = 10)
    weekType = models.CharField( max_length = 10)
    attendance = models.CharField( max_length = 10)
    content = models.TextField( max_length = 300)

Tags: django方法用户pytruemodels状态时间
2条回答

尝试使用unique_together

型号.py

class TimesheetDetails(models.Model):
    user = models.ForeignKey(User, 
    on_delete=models.CASCADE,related_name="timesheet",null="True")
    date = models.DateField()
    day = models.CharField(max_length = 10)
    startTime = models.CharField(max_length =10)
    endTime = models.CharField(max_length =10)
    breakTime = models.CharField(max_length=3)
    normalTime = models.FloatField(max_length=10)
    overTime = models.FloatField(max_length = 10)
    holidayTime = models.FloatField(max_length = 10)
    weekType = models.CharField( max_length = 10)
    attendance = models.CharField( max_length = 10)
    content = models.TextField( max_length = 300)

    class Meta:
        unique_together = ('user', 'date')

您可以通过在TimesheetDetails模型的元类中添加“unique_together”并从日期字段中删除“unqiue”约束来实现这一点

class TimesheetDetails(models.Model):

    class Meta:
        unique_together = (('user','date'))

    user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="timesheet",null="True")
    date = models.DateField(max_length = 10)
    day = models.CharField(max_length = 10)
    startTime = models.CharField(max_length =10)
    endTime = models.CharField(max_length =10)
    breakTime = models.CharField(max_length=3)
    normalTime = models.FloatField(max_length=10)
    overTime = models.FloatField(max_length = 10)
    holidayTime = models.FloatField(max_length = 10)
    weekType = models.CharField( max_length = 10)
    attendance = models.CharField( max_length = 10)
    content = models.TextField( max_length = 300)

相关问题 更多 >