Я хочу создать таблицу с одной строкой в базе данных MySQL. Это для настроек сайта. Это SQL для него, который я нашел в другом вопросе на этом сайте:
CREATE TABLE T1(
Lock char(1) not null DEFAULT 'X',
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
Могу ли я сделать это в программе Django модель? Пока у меня есть:
from django.db import models
class Settings(models.Model):
lock = models.CharField(max_length=1, null=False, primary_key=True, default='X')
employer_day_date = models.DateField
class Meta:
constraints = [CheckContraint()]
Я могу добавить класс Meta: к нему, но PyCharm не распознает CheckConstraint, поэтому я не пошел дальше. У меня нет проблем сделать это в SQL, если это единственный способ.
Я думал об изменении базы данных после миграции, но она казалась довольно грубой.
Решение
Я использовал код @ruddra и некоторые из статьи, которую он разместил:
class SiteSettings(models.Model):
lock = models.CharField(max_length=1, null=False, primary_key=True, default='X')
employer_day_date = models.DateField()
def save(self, *args, **kwargs):
self.pk = 'X'
super().save(*args, **kwargs)
def delete(self, *args, **kwargs):
pass
@classmethod
def load(cls):
obj, created = cls.objects.get_or_create(pk='X')
return obj
После выполнения миграции я зарегистрировал класс в admin, а затем просмотрел таблицу в admin. Там не было никаких рядов. Я не знаю, не работал ли метод класса загрузки или не вызывался load. Как только ряд настроен, он больше не нужен. Я проверил удаление. Я спросил, уверен ли я, что хочу удалить его. Я выбрал да. Ряд был еще там потом.