Встроенный набор форм для создания новых объектов с отношением один ко многим? - PullRequest
2 голосов
/ 24 декабря 2011

models.py:

class Item(models.Model):
    name = models.CharField(max_length=50)

class ItemImage(models.Model):
    image = models.ImageField(upload_to='item_pics')
    item = models.ForeignKey(Item, related_name='images')

В описанных выше моделях Item имеет отношение один ко многим с ItemImage. Я работаю над формой django, которая позволяет пользователю создавать новый экземпляр Item, наряду с возможностью загрузки до двух ItemImage. Обратите внимание, что Item и связанные ItemImage объекты должны быть созданы на одном этапе.

forms.py:

class ItemForm(ModelForm):
    img_1 = fields.ImageField()
    img_2 = fields.ImageField()

    class Meta:
        model = Item
        fields = ('name', 'description', 'circles', 'location', 'rental_fee', 'rental_time_unit', 'deposit', 'rental_rules',)

С другой стороны, вместо добавления полей изображения к ItemForm, я предполагаю, что может быть лучше создать ModelForm для ItemImage и использовать inline formset . Я никогда не использовал встроенный набор форм, и поэтому моя концепция этого все еще неясна. Я хочу знать, является ли это правильным сценарием для использования встроенного набора форм.

1 Ответ

3 голосов
/ 24 декабря 2011

Да, это была бы очень типичная ситуация, в которой вы бы использовали ModelFormSet .

Подход, используемый в вашем forms.py, был бы уместным, если img_1 и img_2 были фактическими полямикласса Item, но ModelFormSet является лучшим выбором при работе с набором связанных моделей.

Рассмотрим будущий случай, когда вы хотите разрешить пользователям три изображения, а не два.Используя ModelFormSet, это будет изменение кода символ .Если вы хотите собрать вспомогательную информацию о классе ItemImage, это также будет тривиальным изменением.

...