База данных позволяет дублировать запись для внешнего ключа в Django - PullRequest
0 голосов
/ 08 января 2020

Я хочу разрешить ввод повторяющейся даты для внешних ключей. Есть ли какой-нибудь метод в 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)

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Попробуйте использовать unique_together

models.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')
1 голос
/ 08 января 2020

Вы можете достичь этого, добавив «unique_together» в мета-класс вашей модели TimesheetDetails и удалив ограничение «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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...