1. moskrc

    19.07.2010

    0 ↑
    0 ↓
    Привет. Обновил Django до версии 1.2.1 и отвалилась функциональность добавления объектов на сайт. Было сделано через формсеты и работало хорошо. Сейчас выдает вот такую ошибку. Подскажите что это может быть.
    ValueError at /catalog/add/

    Cannot assign "1": "CardOption.option" must be a "Option" instance.
    Вот код.
        if request.method == 'POST':
    form = forms.CardForm(request.POST, request.FILES)
    if form.is_valid():
    card = form.save(commit=False)
    card.user = request.user
    card.display_counter = 0
    card.visibled = 1
    card.save()
    save_images(request, card)

    formset = CardOptionFormSet(request.POST, initial=data)
    if formset.is_valid(): # ОШИБКА ВОЗНИКАЕТ ВОТ ЗДЕСЬ <<<<<<<<
    for cardoption in card.cardoption_set.all():
    cardoption.delete()

    for f in formset.cleaned_data:
    if f['is_checked']:
    co = CardOption(card_id=card.id, option_id=f['option'], description=f['description'])
    card.cardoption_set.add(co)
    card.save()
    ...
    ...
    ...
  2. Михаил

    20.07.2010

    0 ↑
    0 ↓
    По этому куску кода не очень понятно, откуда что берется. Как описаны модели, как формы?
    Кстати, почему вы ModelForms не используете? С ними все было бы на порядок проще, как-то так:
    card_instance = Card()
    form = CardModelForm(request.POST, request.FILES, instance=card_instance)
    formset = CardOptionModelFormSet(request.POST, instance=card_instance)

    if form.is_valid() and formset.is_valid()
    formset.save()
    form.save(commit=False)
    ....
    P.S. Если память не подводит, после add() еще раз делать save() не нужно
    card.cardoption_set.add(co)
    card.save()

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.