2016-07-20 30 views
1

Wie füge ich ein Textfeld neben einem Optionsfeld mithilfe von Django-Formularen hinzu? Ich habe bereits das Setup für die Radioknöpfe alleine.So fügen Sie ein Textfeld neben einem Optionsfeld hinzu

Ich möchte auch den Wert der Textbox anstelle von "Andere" speichern.

forms.py

from django import forms 
from .models import MyModel 

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = (
      'question', 
     ) 
     widgets = { 
      'question': forms.RadioSelect, 
     } 

models.py

class MyModel(TimeStampedModel): 
    Choice1 = "Choice 1" 
    Choice2 = "Choice 2" 
    Other = "Other" 
    MyModel_Choices = (
     (Choice1 = 'Choice 1'), 
     (Choice2 = 'Choice 2'), 
     (Other = 'Other'), 
    ) 

    question = models.CharField(
     _('Question'), 
     max_length=100, 
     choices=MyModel_Choices, 
     help_text='Help Text' 
    ) 

Erwartete Ausgabe:

Frage:

  • Choice1
  • Choice2
  • Andere [Textbox]

Hilfetext

Antwort

0

ein weiteres Eingabefeld Ihre django Form hinzufügen in forms.py

Jetzt in Ihrem JavaScript-Datei, verstecken, dass die Eingabe, wenn Seite geladen wird.

$("#user-input-textbox").hide(); 

Und es anzuzeigen, wenn die ‚Andere‘ Radio-Button aktiviert ist und es zu verstecken, wenn es nicht aktiviert ist, und deaktivieren Sie auch den vorhandenen Wert vor Versteck:

$('#Other').click(function(){ 
    if ($(this).is(':checked')){ 
     $("#user-input-textbox").show(); 
    } 
    else{ 
     $("#user-input-textbox").html(''); 
     $("#user-input-textbox").hide(); 
    } 
}); 
+0

Dazu müsste ich ein weiteres Eingabefeld hinzufügen? deshalb eine andere Spalte in meinen Modellen? – Markkkkk

+0

Nein, das musst du nicht. Technisch gibt es zwei Möglichkeiten, dies zu tun. Zuerst ist die Verwendung von forms.Form anstelle von forms.ModelForm, wo Sie den vollen Luxus haben, so viele Eingabefelder und Optionsfelder hinzuzufügen, wie Sie unabhängig vom Modell werden. Zweite Methode ist die Verwendung Ihrer Forms.ModelForm und einfach ein zusätzliches Feld in diese wie folgt einfügen -> http://stackoverflow.com/questions/12097825/specifying-widget-for-model-form-extra-field-django –

+0

Außerdem können Sie die neu hinzugefügte Eingabe ausblenden, indem Sie so etwas tun -> http://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input –

0

Wenn das Textfeld Django Form nicht in Ihrem ist, wie der nicht einer der Eingabe in dem Formular, dann können Sie einfach gesagt, dass Text in einem div in Ihrem hTML und unter Verwendung der CSS-Anzeige Eigenschaften von inline oder inline-block, können Sie sich anzeigen, dass neben der "Andere" Radio-Button

div

sehen diese ->http://www.w3schools.com/cssref/pr_class_display.asp

+0

Ich würde es in meinem Django sein will Form, ich möchte, dass es eine der Eingaben in meiner Form ist (ersetzt "Andere"). – Markkkkk

+0

Sie möchten, dass es dynamisch ist oder was? Coz ich denke, wenn Sie diesen Text anstelle von "Andere" nur in Ihren MyModel_Choices schreiben, nehme ich an, dass es funktionieren sollte.? –

+0

Ich möchte es dynamisch sein, Benutzereingaben es. – Markkkkk

0

Ich glaube nicht, dass es auch funktionieren, wenn Sie das Widget angeben könnte, da Sie nicht, wo haben würde es in dem Modell speichern - Ihr question Feld auf die Auswahl ist begrenzt Sie setzen im Modell.

Vielleicht möchten Sie Ihr Design überdenken, Sie könnten eine separate Eingabe unter den Radiobuttons haben, die nur erforderlich ist (vielleicht?), Wenn die Radio-Wahl eine andere ist.

So müsste es bei der Buchung den Code verarbeiten, da für alle Eingaben ein Name vergeben werden müsste.