Django formset_factory против modelformset_factory против inlineformset_factory - PullRequest
0 голосов
/ 28 октября 2018

Формы могут быть сложными в Джанго.Formsets может заставить вас выйти из Django.Я в этом месте.

Каковы различные варианты использования и соображения того, какой из них использовать?

Я ищу более подробные рекомендации относительно того, когда использовать каждую фабрику, поскольку они, кажется, зависято том, когда вы знаете, какой тип формы, поля, а также о том, создаете ли вы, редактируете или удаляете (полностью отдельные формы или родительскую модель).Я прочитал множество пошаговых руководств, но изо всех сил пытаюсь увидеть более широкую картину, особенно когда я пытаюсь перейти от представлений на основе функций к представлениям на основе классов.

Ниже приведен псевдокод с предположениями / ограничениями, которые помогут вам помочья понимаю разницу.Это может помочь предоставить psuedocode, например, какая форма (ModelForm или обычная) идет с Formset, или что должно pop считаться с формой, учитывая, что это похоже на тенденцию создания форм с отношениями.

Если у вас есть несколько моделей:

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)
  • , предполагая:
    • на этом этапе вы знаете, какой это Meal, но вам все равно нужно сделать Reservation в то же время / в том же виде.
    • вы не знаете, какие Dish вы собираетесь готовить, так как в резервации вам сообщат.
    • MealPhotos вон 'пока не существует, так как еда еще не приготовлена.
    • Вы хотите создать блюдо и бронь на одной и той же форме / экране

Затем позже вы захотите добавить некоторые блюда, основываясь на том, чтоReservation говорит:

  • какую фабрику вы бы использовали?
  • это зависит от того, все ли формы ModelForms?
  • при условии:
    • на этом этапе вы знаете, какой это Meal, и у вас есть Reservation
    • , который вы собираетесь назначать блюдам на основе Reservation, и у вас достаточно информации, чтобысделать это, и вы можете использовать ModelForm легко, но не обязательно

Позже человек, который ест блюдо, хочет сделать несколько фотографий, а вы не знаете, сколько ихпримет

  • , какую фабрику вы бы использовали?
  • это зависит от того, все ли формы ModelForms?
  • при условии:
    • мы потребуем, чтобы они взяли не менее двух
    • , у нас есть доступ к Meal, Reservation и Dishes
    • , которые по желанию можно присвоить Dish
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...