2015-10-22 2 views
0

Я в настоящее время предоставляет выбор в раскрывающемся списке в модели, как это:Джанго падение падение в модели

class FoodType(models.Model): 
    type = models.CharField(max_length=30, unique=True) 

    def __unicode__(self): 
    return self.type 

class Food(models.Model): 
    name = models.CharField(max_length=30, unique=True) 
    type = models.ForeignKey(FoodType) 

    def __unicode__(self): 
    return self.name 

Я сделал это так, а не закодированный выбор, потому что я хочу, чтобы обеспечить возможность добавления/удаление/change FoodTypes через администратора после развертывания приложения. Но потом я понял, что если FoodType будет удален из-за того, что еда зависит от, Food также удаляется, чего я не хочу. Я хочу иметь возможность хранить все записи Food, если я явно не хочу их удалить.

Есть ли лучший способ сделать это, который по-прежнему позволяет пользователю изменять FoodTypes через администратора?

Спасибо :)

ответ

1

Вы можете установить параметр ForeignKey поля on_delete значение, отличающееся чем CASCADE (значение по умолчанию).

Ex:

type = models.ForeignKey(FoodType, null=True, on_delete=models.SET_NULL) 
+0

ОК спасибо, что выглядит как то, что я после. Я также думал, что могу это сделать, всегда сохраняя FoodTypes, но устанавливая 'is_deleted = models.BooleanField (default = False)', чтобы я мог настроить раскрывающееся меню, чтобы заполнить выпадающее меню Foodtype, где 'is_deleted = False '... не уверен, будет ли это хорошей практикой, хотя модель FoodTypes может запутаться? – DrBuck

+0

Действительно, «мягкое удаление» - это другое решение, это, вероятно, более эффективная практика, но немного сложнее реализовать. Существуют [Django apps] (https://www.djangopackages.com/grids/g/deletion/), которые предоставляют его, но я никогда не использовал их самостоятельно, также есть много статей по этому вопросу. – aumo

+0

Я собираюсь попробовать и реализовать это решение, но спасибо, что привлек внимание 'on_delete', это определенно будет полезно для других приложений! – DrBuck

Смежные вопросы