AdminInline и неизвестное ограничение UNIQUE IntegrityError не выполнено - PullRequest
0 голосов
/ 27 марта 2020
Django Version: 3.0.4
Exception Type: IntegrityError
Exception Value:    
UNIQUE constraint failed: store_hoursofoperation.day

Здравствуйте, я пытаюсь устранить эту ошибку, но не знаю, как продолжить. Я хочу, чтобы модель Store содержала несколько HoursOfOperation. Однако эта ошибка возникает всякий раз, когда я добавляю другой будний день в любом магазине - в магазине A есть часы понедельника, в магазине B будет ошибка, если я добавлю часы понедельника.

Я использую администратора по умолчанию для включения HoursOfOperation в Store модель.

Как мне сделать так, чтобы HoursOfOperation.day не был уникальным?

image-of-admin-panel

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')

1 Ответ

0 голосов
/ 27 марта 2020

@ Комментарий IainShelvington о запуске manage.py makemigrations сделал это.

Даже если вы думаете, что вы запустили manage.py makemigrations и manage.py migrate, дважды проверьте код и , запустите его один больше времени, прежде чем сдаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...