Формы могут быть сложными в Django. Наборы форм могут вызвать у вас желание выйти из Django. Я в этот момент.
Каковы различные варианты использования и соображения о том, какой из них использовать?
Я ищу лучшее руководство относительно того, когда использовать каждую фабрику, поскольку они, похоже, зависят от того, когда вы знаете, какой тип формы, поля и создаете ли вы, редактируете или удаляете (отдельные формы полностью или родительская модель вообще). Я прочитал много пошаговых руководств, но изо всех сил пытаюсь увидеть более широкую картину, особенно когда я пытаюсь перейти от представлений, основанных на функциях, к представлениям, основанным на классах.
Ниже приведен некоторый псевдокод с предположениями/ограничениями, который поможет вам понять различия. Это может помочь предоставить псевдокод, например, какая форма (ModelForm или обычная) идет с набором форм или что должно быть pop
ped из формы, учитывая, что это похоже на тенденцию создания форм с отношениями.
Предполагая, что у вас есть несколько моделей:
class Dish(models.Model):
name = models.CharField(max_length=50)
class Meal(models.Model):
name = models.CharField(max_length=50)
dishes = models.ManyToManyField(Dish,
# through='OPTIIONALMealDishIntermediaryClassTable',
related_name="meal")
class Reservation(models.Model):
date = models.DateTimeField()
greeting = models.CharField(max_length=255)
meal = models.OneToOneField(Meal, on_delete=models.CASCADE)
class MealPhotos(models.Model):
photo = models.OneToOneField(Photo, on_delete=models.CASCADE, related_name='mealPhoto')
meal = models.ForeignKey(Meal, on_delete=models.CASCADE)
# optional, so a photo can be attached to a dish if the picture is just of the dish
dish = models.ForeignKey(Dish, blank=True, null=True, on_delete=models.CASCADE)
И вы хотите создать новый Meal
, вы хотите отправить Reservation
одновременно:
- какой завод вы бы использовали?
- это зависит от того, все ли формы
ModelForms
? (имеется в виду, как бы вы справились с назначениемMeal
егоReservation
) - assuming:
- at this stage you know which
Meal
it is, but you still have to make aReservation
at the same time/same view. - вы не знаете, какие
Dish
es вы собираетесь готовить, так как бронирование скажет вам. MealPhotos
еще не будет, так как еда еще не приготовлена.- Вы хотите создать еду и бронирование на одной и той же форме/экране
- at this stage you know which
Позже вы захотите добавить несколько блюд, основываясь на том, что говорит Reservation
:
- какой завод вы бы использовали?
- это зависит от того, все ли формы
ModelForms
? - assuming:
- at this stage you know which
Meal
it is, and you have aReservation
- вы собираетесь назначить блюда еде на основе
Reservation
, и у вас достаточно информации для этого, и вы можете легко использовать ModelForm, но не обязательно
- at this stage you know which
Позже человек, который ест блюдо, хочет сделать несколько фотографий, и вы не знаете, сколько он сделает.
- какой завод вы бы использовали?
- это зависит от того, все ли формы
ModelForms
? - assuming:
- we will require them to take at least two
- у нас есть доступ к
Meal
,Reservation
иDishes
- фотография может быть дополнительно назначена
Dish