2017-09-06 1 views
0

Ich stehe in einem Problem, bei dem mein Formular den Formularfeldwert bei einer fehlgeschlagenen Formularübermittlung nicht beibehält. Der Catch ist, dass ich möchte, dass es für den Benutzer sichtbar ist, dass sie keinen anderen Staat auswählen können (da es eine Website speziell für eine Stadt innerhalb des Staates ist), also habe ich es deaktiviert. Wenn ich dieses Widgetattribut entferne, behält es die Feldinformationen bei, sonst wird es zurückgesetzt und ich kann das Feld nicht bearbeiten, da ich es deaktiviert habe. Fordern Sie eine Abhilfe oder eine Empfehlung an. Code folgt.Behalten des Formularausgabefeldes in Django bei

forms.py

from django import forms 
from django.core.exceptions import ValidationError 
from django.forms import ModelForm 
from .models import Resource 
from localflavor.us.forms import USStateSelect 
from localflavor.us.forms import USZipCodeField 
import pickle 

zips = pickle.load(open('../zips.p', "rb")) 


def validate_zip(zip_code): 
    """Ensure zip provided by user is in King County.""" 
    if zip_code not in zips: 
     raise ValidationError(
      '{} is not a valid King County zip code.'.format(zip_code), 
      params={'zip_code': zip_code}, 
     ) 


class ResourceForm(ModelForm): 
    """Form for editing and creating resources.""" 

    zip_code = forms.IntegerField(validators=[validate_zip]) 

    class Meta: 
     model = Resource 
     fields = ['main_category', 'org_name', 
        'description', 'street', 'city', 'state', 'zip_code', 'website', 
       'phone_number', 'image', 'tags'] 
     labels = { 
      'org_name': 'Name of Organization', 
      'main_category': 'Main Categories', 
     } 
     help_texts = { 
      'main_category': 'The core services your organization provides.', 
     } 
     widgets = { 
      'state': USStateSelect(attrs={'disabled': True}), 
     } 

models.py (Felder)

org_name = models.CharField(max_length=128) 
description = models.TextField(max_length=512) 
street = models.CharField(max_length=256, null=True, blank=True) 
city = models.CharField(max_length=256, default='Seattle') 
state = USStateField(default='WA') 
zip_code = USZipCodeField(null=True, blank=True) 
website = models.URLField(blank=True, null=True) 
phone_number = PhoneNumberField() 
tags = TaggableManager(blank=True) 
image = models.ImageField(upload_to='photos', null=True, blank=True) 

views.py (für diese Ansicht allein)

class CreateResource(LoginRequiredMixin, CreateView): 
    """Class-based view to create new resources.""" 

    template_name = 'searchlist/resource_form.html' 
    form_class = ResourceForm 
    success_url = reverse_lazy('home') 
+0

Können Sie Ihre Ansicht zeigen? –

+0

Sorry, nur hinzugefügt. –

Antwort

1

Browser Eingaben ignorieren, dass die disabled haben Attributsatz Setzen Sie stattdessen readonly auf den Eingang; Die Eingabe ist nicht bearbeitbar, aber ihr Wert wird bei der Übermittlung des Formulars berücksichtigt.

widgets = { 
     'state': USStateSelect(attrs={'readonly': True}), 
    } 
+0

Es lohnt sich, die Antworten auf https://stackoverflow.com/q/324477/5320906 auch zu sehen. – snakecharmerb

Verwandte Themen