Django: я хочу сохранить выбранное значение отображения в базе данных вместо названия выбранного параметра - PullRequest
0 голосов
/ 01 ноября 2018

В файле forms.py я создал виджет application_status и добавил его в customerForm. это как показано ниже:

APPLICATION_STATUS = [
    ('new', 'New'),
    ('processing', 'Processing'),
    ('reject', 'Rejected'),
    ('complete', 'Completed'),
]

class CustomerForm(forms.ModelForm):
    application_status = forms.CharField(label='What is your application status?',
                                         widget=forms.Select(choices=APPLICATION_STATUS))

    # email_one = forms.EmailField()
    class Meta:
        model = Customer
        fields = ('application_status')

А затем в view.py я сохраняю выбранное значение в базе данных, но оно сохраняет имя выбранного параметра, а не отображаемое значение. Например, я выбираю опцию «Обработка» и хочу, чтобы значение «Обработка» было сохранено в базе данных. Но я вижу, что «обработка» сохранена. Код как ниже:

def customer_new(request):
    if request.method == "POST":
        form = CustomerForm(request.POST)
        if form.is_valid():
            customer = form.save(commit=False)
            customer.status = request.POST.get('application_status')
            customer.save()
            return redirect('customer_detail', pk=customer.pk)
    else:
        form = CustomerForm()
    return render(request, 'customer_edit.html', {'form': form})

Пожалуйста, помогите немного.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Правильный ответ:

opciones = (
    ('a','A'),
    ('a1','A1')
    )
class Producto(ModelForm):
      a = forms.ChoiceField(choices=opciones)

... С этим, фреймворк покажет вам выбор этих параметров ...

0 голосов
/ 01 ноября 2018

По моему мнению, то, что он делает сейчас, правильно. Он должен использовать первый экземпляр APPLICATION_STATUS для хранения в базе данных, а второй - в качестве отображаемой версии. Если вам нужно сохранить второе значение в кортеже, то измените APPLICATION_STATUS, чтобы отразить это:

APPLICATION_STATUS = [
    ('New', 'New'),
    ('Processing', 'Processing'),
    ('Rejected', 'Rejected'),
    ('Completed', 'Completed'),
]

Но опять же, на мой взгляд, это было бы неправильно.

...