Начальное значение Django для поля MultiChoice игнорируется для ModelForm - PullRequest
0 голосов
/ 21 мая 2018

это мой первый пост здесь, и я очень новичок в Django, но я просто не могу найти решение этой проблемы ... Я искал stackoverflow и google, но мне кажется, что ничего не работает ...

У меня есть приложение-вино, и я хочу добавлять и удалять вина со склада пользователя.В списке вин пользователь может выбрать вино для добавления, и идентификатор этого вина передается в данных POST.Поскольку данные теряются после первого отображения представления, я сохранил идентификатор в файле cookie, который работает, но проблема в том, что когда я работаю с ModelForm, пользователь должен выбрать внешний ключ для пользователя и для Wine, что плохо, поэтому я попытался скрыть его и установить Fk_user и Fk_wine после того, как пользователь выберет количество бутылок, которые будут добавлены, но до проверки.Вот проблема после того, как Google все предложили мне использовать «начальный» и передать его в форму, но это явно не работает, потому что, если я сделаю поля видимыми в форме, я вижу, что он не выбран заранее ...

viewy.py:

def addStockView(request):
    wineId = request.POST.get('addStock')
    if 'addStock' in request.POST:
        wine = get_object_or_404(Wine, idwine=int(wineId))
    userId = request.user.id
    user = get_object_or_404(AuthUser, id=userId)
    if request.method == 'POST':
        #wineIdNew = request.COOKIES.get('wineIdToAdd')
        #wineNew = get_object_or_404(Wine, idwine=wineIdNew)
        form = StockForm(request.POST, initial={'fk_wine': wineNew.idwine, 'fk_auth_user': user.id})
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = StockForm(initial={'fk_wine': wine.id,
                                  'fk_auth_user': user.id})
    response = render(request, 'addToStock.html', {'form': form})
    response.set_cookie('wineIdToAdd', wineId)
    return response

forms.py:

class StockForm(forms.ModelForm):
    #fk_wine = ModelChoiceField(queryset=Wine.objects.all(),
      #                        widget=HiddenInput())
    #fk_auth_user = ModelChoiceField(queryset=AuthUser.objects.all(),
     #                          widget=HiddenInput())
    class Meta:
        model = UserWineStock
        fields = ['fk_auth_user', 'fk_wine', 'number']

Может кто-нибудь помочь мне с этим ..?

1 Ответ

0 голосов
/ 21 мая 2018

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

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

form = StockForm(request.POST)
if form.is_valid():
    item = form.save(commit=False)
    item.fk_wine = wine
    item.fk_auth_user = request.user
    item.save()
    return redirect('home')

(Также, пожалуйста, не называйте свои поля такими вещами, как fk_auth_user. Просто назовите это user.)

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