2012-04-15 3 views
1

У меня есть эта таблица Продукты:
размера
цвета
и т.д.
Джанго: добавить поле формы в сгенерированную форму из другой таблицы

и другой стол Картинка:
PRODUCT_ID
картина

, и я создал форму из таблицы Products, но мне также нужно поле для добавления изображения к этому продукту. Можно ли добавить поле в форму, сгенерированную для изображения?

Заранее спасибо.

ответ

0

Короткий ответ: да. Вы должны быть осторожны с вашим шаблоном и представлениями.

Можете ли вы поделиться своим кодом ... посмотреть, модели django и шаблон. Вы используете модельные формы? Почему вы держите их в виде отдельных моделей (таблиц)?

Мое предложение состоит в том, что вам не нужно оставлять модели отдельно, отредактируйте модель продукта, чтобы включить Pictures. Тогда ваша форма прекрасно подойдет вашим потребностям.

Надеюсь, это поможет. Если нет, используйте общий код.

+0

Спасибо за ваш ответ. Сначала у меня была картинка в таблице продуктов, но потом я понял, что мне нужно больше одного изображения для одного продукта, поэтому я сделал специальную таблицу для фотографий. Код от Alasdair выполнил эту работу. – fiddis

3

Вы можете включить несколько форм в один и тот же тег <form>, используя аргумент prefix.

Исключить из поля модель продукта. В представлении проверьте, являются ли обе формы действительными. Если обе формы действительны, сохраните обе формы, но используйте commit=False для формы изображения, чтобы вы могли вручную установить продукт.

Собираем все вместе, ваши формы и вид должен выглядеть примерно так:

class ProductForm(forms.ModelForm): 
    class Meta: 
     model = Product 

class PictureForm(forms.ModelForm): 
    class Meta: 
     model = Picture 
     exclude = ('product',) 

def my_view(request): 
    if request.method == "POST": 
     product_form = ProductForm(prefix="product", data=request.POST) 
     picture_form = PictureForm(prefix="picture", data=request.POST, files=request.FILES) 
     if product_form.is_valid() and picture_form.is_valid(): 
      product = product_form.save() 
      picture = picture_form.save(commit=False) 
      picture.product=product 
      picture.save() 
      return HttpResponseRedirect("/success_url/") 
    else: 
     product_form = ProductForm(prefix="product") 
     picture_form = PictureForm(prefix="picture") 
    return render(request, "my_template.html", {'product_form':product_form, 
            'picture_form': picture_form, 
            }) 

Ваш шаблон должен выглядеть следующим образом:

<form> 
    <table> 
    <tbody> 
     {{ product_form }} 
     {{ picture_form }} 
    </tbody> 
    </table> 
    <p><input type="submit" value="Submit" /></p> 
</form> 
+0

nitpick: первый параметр 'render()' is 'request' – okm

+0

@okm да, это так. Исправлено. – Alasdair

+0

Спасибо, вот что мне нужно! :) – fiddis

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