База данных Django: сохранение новой записи без предварительного сохранения ее внешних ключей

Предположим, у меня есть такая структура модели:

class Cheese(Model.models):
    type = models.CharField(max_length='50')

class Sauce(Models.models):
    type = models.CharField(max_length='50')

class Pizza(Models.models):
    cheese = models.ForeignKey(Cheese)
    sauce = models.ForeignKey(Sauce)

class PizzaOrder(Models.model):
    pizza = models.ForeignKey(Pizza)
    time = models.DateTimeField(auto_now_add=True)

Учитывая это, теперь я хочу создать новую запись для PizzaOrder, но мне не нужны дубликаты Cheese, Sauce или Pizza, а только PizzaOrder для обозначения того, что пицца была только что заказана.

Это приводит к ошибке, которая обсуждается здесь. .

Как я могу избежать этой проблемы? Мне не нужен дубликат объекта Pizza каждый раз, когда я получаю новый PizzaOrder.


person user8951490    schedule 23.11.2017    source источник
comment
Как насчет pizza = models.ForeignKey(Pizza, unique=True). Вы также можете установить другие поля модели в unique   -  person Lord Salforis    schedule 23.11.2017


Ответы (1)


Если вы хотите избежать дублирования сыра, соуса и пиццы, вы можете сделать это следующим образом:

class Cheese(Model.models):
    type = models.CharField(max_length='50', unique=True)

class Sauce(Models.models):
    type = models.CharField(max_length='50', unique=True)

class Pizza(Models.models):
    cheese = models.ForeignKey(Cheese)
    sauce = models.ForeignKey(Sauce)

    class Meta:
         unique_togather=(("cheese", "sauce"),)
person ruddra    schedule 23.11.2017
comment
Я использовал уникальный атрибут, и это сломало мою базу данных... Получение ошибки django.db.utils.IntegrityError: UNIQUE constraint failed: Я думал, что удаление уникальных атрибутов исправит это, но это не так, поэтому я вернул их обратно и убедился, что все их значения равны False... Тем не менее ошибка есть, я предполагаю, что есть какой-то механизм кэширования. - person user8951490; 23.11.2017
comment
Возможно, вы пытались сохранить повторяющиеся значения в БД, или таблицы содержат повторяющиеся значения (в этом случае попробуйте удалить повторяющиеся значения из БД). - person ruddra; 23.11.2017