Работа с несколькими объектами с отношением внешнего ключа в inlineform_set - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть следующие модели Django:

class Order:
    order_id
    order_date
class OrderItem
    models.ForeignKey(Order)
    models.ForeignKey(Product)
    quantity
    unit_price

Для пояснения, заказ может содержать несколько позиций заказа.

Теперь я хочу создать шаблон, который позволил бы создать заказ. Итак, на мой взгляд, у меня есть следующее:

def new_order:
    order = Order()
    OrderItemFormSet = inlineformset_factory(Order, OrderItem, extra=2)
    formset = OrderItemFormSet()
    cntx = {'formset': formset, 'order':order}
    return render_to_response('some_page.html', cntx)

В самом шаблоне я перебираю формы в наборе форм, и все, кажется, работает, что означает, что я могу создать заказ с несколькими элементами заказа.

Теперь я создал новую модель под названием Product. Новая модель Product будет частью модели OrderItem. Поэтому мы заказываем товар, содержащий товар, наряду с другими показателями, такими как количество, цена за единицу и т. Д.

class Product:
    product_code
    product_name

Затем я обновил модель OrderItem следующей строкой:

product = models.ForeignKey(Product)

Проблема, с которой я сталкиваюсь, заключается в том, как обработать вышеуказанный сценарий в шаблоне. Перед добавлением модели Product цикл for, который выполняет итерации по набору форм, выглядит следующим образом:

{% for form in formset %}
   <td> {{form.quantity}} </td>
   ....
{%endfor%}

Теперь, в идеале, я думал, что смогу это:

{% for form in formset %}
  <td> {{form.quantity}} </td>
  <td> {{form.product.code}} </td>
  ....

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

Любое понимание будет оценено.

Спасибо ...

1 Ответ

0 голосов
/ 08 декабря 2010

Вы не можете иметь несколько вложенных наборов форм.Но они вам здесь не нужны.Все, что вам действительно нужно, это чтобы форма заказа имела поле product, которое является полем выбора всех доступных продуктов и их кодов.И вы получаете это автоматически, если вы определяете метод __unicode__ модели Product для возврата кода продукта, а затем используете form.product в шаблоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...