Django Version: 3.0.4
Exception Type: IntegrityError
Exception Value:
UNIQUE constraint failed: store_hoursofoperation.day
Здравствуйте, я пытаюсь устранить эту ошибку, но не знаю, как продолжить. Я хочу, чтобы модель Store
содержала несколько HoursOfOperation
. Однако эта ошибка возникает всякий раз, когда я добавляю другой будний день в любом магазине - в магазине A есть часы понедельника, в магазине B будет ошибка, если я добавлю часы понедельника.
Я использую администратора по умолчанию для включения HoursOfOperation
в Store
модель.
Как мне сделать так, чтобы HoursOfOperation.day не был уникальным?
admin.site.register(HoursOfOperation)
class HoursOfOperationInline(admin.TabularInline):
model = HoursOfOperation
extra = 0
@admin.register(Store)
class StoreAdmin(admin.ModelAdmin):
inlines = [
HoursOfOperationInline
]
WEEKDAYS = [
(1, ("Monday")),
(2, ("Tuesday")),
(3, ("Wednesday")),
(4, ("Thursday")),
(5, ("Friday")),
(6, ("Saturday")),
(7, ("Sunday")),
]
class Store(models.Model):
name = models.CharField(max_length=250)
summary = models.CharField(max_length=250)
address_line1 = models.CharField(max_length=100)
address_line2 = models.CharField(max_length=50)
phone = models.CharField(max_length=12)
website = models.CharField(max_length=50)
status_storefront = models.BooleanField(
help_text="Is the storefront open to customers?"
)
status_takeout = models.BooleanField(
help_text="Is takeout available for customers?"
)
status_delivery = models.BooleanField(
help_text="What is the delivery service? [No, Yes, Custom]"
)
status_delivery_service = models.CharField(
max_length=20,
blank=True,
null=True
)
anchor_id = models.CharField(max_length=30)
hours = models.Many
@property
def storefront(self):
return "Yes" if self.status_storefront else "No"
@property
def takeout(self):
return "Yes" if self.status_takeout else "No"
@property
def delivery(self):
if self.status_delivery:
if self.status_delivery_service:
return self.status_delivery_service
return "Yes"
else:
return "No"
class HoursOfOperation(models.Model):
store = models.ForeignKey(Store, on_delete=models.CASCADE)
day = models.IntegerField(choices=WEEKDAYS)
time_open = models.TimeField(
auto_now=False,
auto_now_add=False,
blank=True,
null=True
)
time_close = models.TimeField(
auto_now=False,
auto_now_add=False,
blank=True,
null=True
)
def get_day_display(self):
return WEEKDAYS[self.day]
@property
def open(self):
if self.time_open and self.time_close:
return self.time_open
else:
return "Closed"
@property
def close(self):
if self.time_open and self.time_close:
return self.time_close
else:
return ""
class Meta:
ordering = ('time_open', 'time_close')