Django formu açılır seçimine ek verileri alın:Ben bir eylem tekrarlanırsa ne sıklıkta belirten bir yabancı anahtar vardır bir Eylem modeli var
class Reoccurance(models.Model):
label = models.CharField("Label", max_length=50, unique = True)
days = models.IntegerField("Days")
def __unicode__(self):
return self.label
class Meta:
ordering = ['days']
class Action(models.Model):
name = models.CharField("Action Name", max_length=200, unique = True)
complete = models.BooleanField(default=False, verbose_name="Complete?")
reoccurance = models.ForeignKey(Reoccurance, blank=True, null=True, verbose_name="Reoccurance")
ben yapıyorum için HTML kodu ile sonuçlanan Eylem bir modelForm tekrarının (tekrarının tablo için mevcut veritabanı değerlerine dayanarak): Gördüğünüz gibi seçimleri artan gün sırayla olsa onlar dışarı veritabanına girildi, çünkü değerler sıralamada olmaması
<select id="id_reoccurance" class="select" name="reoccurance">
<option value="" selected="selected">---------</option>
<option value="12">2 Days</option>
<option value="1">3 Days</option>
<option value="2">5 Days</option>
<option value="10">6 Days</option>
<option value="9">1 Week</option>
<option value="3">10 Days</option>
<option value="4">2 Weeks</option>
<option value="11">3 Weeks</option>
<option value="5">1 Month</option>
<option value="13">6 Weeks</option>
<option value="6">1 Quarter</option>
<option value="7">6 Months</option>
<option value="8">1 Year</option>
</select>
düzenin.
Eylemin ne zaman tekrarlayacağı tarihi dinamik olarak hesaplayan bir jquery oluşturmak istiyorum. Bugünün tarihini alacak ve kullanıcının seçtiği seçime karşılık gelen gün sayısını ekleyecektir. Ama formda aldığım verilerle, seçimi belirli bir güne çeviremiyorum. Seçenek öğelerinin değerleri sıralı olsa bile, yine de "1 Yıl" ifadesinin 365 güne eşit olduğunu göstermez.
Bu veriler yine de Reoccurance tablosunda. Etiket = "1 Yıl" için, gün = 365. Aynı şekilde, Reoccurance tablosundaki tüm öğeler için.
ModelForm'ımı yeniden yazmanın bir yolu var mı? Böylece, her bir aşağı açılan öğenin seçenek değeri, bu seçim için gün sayısına eşittir.
$("#id_reoccurance").change(function() {
alert($(this).val());
});
bu olumsuz ve tekrarının tablonun doğru satıra doğru ve tekrarının seçimini kravat yeteneğimi etkiler mi: Çünkü o zaman, ben gün sayısını erişebilir? Bu günlere erişebilmem için başka bir yol var mı?
from django.utils.html import conditional_escape, escape
from django.utils.encoding import force_unicode
class SelectWithTitles(forms.Select):
def __init__(self, *args, **kwargs):
super(SelectWithTitles, self).__init__(*args, **kwargs)
# Ensure the titles dict exists
self.titles = {}
def render_option(self, selected_choices, option_value, option_label):
title_html = (option_label in self.titles) and \
u' title="%s" ' % escape(force_unicode(self.titles[option_label])) or ''
option_value = force_unicode(option_value)
selected_html = (option_value in selected_choices) and u' selected="selected"' or ''
return u'<option value="%s"%s%s>%s</option>' % (
escape(option_value), title_html, selected_html,
conditional_escape(force_unicode(option_label)))
class ChoiceFieldWithTitles(forms.ChoiceField):
widget = SelectWithTitles
def __init__(self, choices=(), *args, **kwargs):
choice_pairs = [(c[0], c[1]) for c in choices]
super(ChoiceFieldWithTitles, self).__init__(choices=choice_pairs, *args, **kwargs)
self.widget.titles = dict([(c[1], c[2]) for c in choices])
class ActionForm(forms.ModelForm):
reoccurance = ChoiceFieldWithTitles()
def __init__(self, *args, **kwargs):
super(ActionForm, self).__init__(*args, **kwargs)
choices = []
for pt in Reoccurance.objects.all():
choices.append((pt.id, pt.label, pt.days))
self.fields['reoccurance'] = ChoiceFieldWithTitles(choices = choices)
Fantastik:
Güncelleme this post kontrol etmek Joseph'in önerisine
Teşekkür, benim seçenek elemanda bir başlık eklemeyi başardı. neredeyse geldik gibi
<select id="id_reoccurance" class="selectwithtitles" name="reoccurance">
<option value="12" title="2" >2 Days</option>
<option value="1" title="3" >3 Days</option>
<option value="2" title="5" >5 Days</option>
<option value="10" title="6" >6 Days</option>
<option value="9" title="7" >1 Week</option>
<option value="3" title="10" >10 Days</option>
<option value="4" title="14" >2 Weeks</option>
<option value="11" title="21" >3 Weeks</option>
<option value="5" title="30" >1 Month</option>
<option value="13" title="42" >6 Weeks</option>
<option value="6" title="90" >1 Quarter</option>
<option value="7" title="180" >6 Months</option>
<option value="8" title="365" >1 Year</option>
</select>
Tamam, öyle görünüyor ki, ama takıldı alıyorum: Şimdi ben şablonunda aşağıdaki olsun.
$(function() {
$("#id_reoccurance").change(function() {
alert($(this).attr('title'));
});
});
Sorun o geri dönme konusu tanımsız oluyor ki: jquery, ben belirlenen seçeneğe unvanı almaya aşağıdaki çalışıyorum!
Güncelleme o
$(function() {
$("#id_reoccurance").change(function() {
alert($(this).find("option:selected").attr("title"));
});
});
formun __init __() içindeki öznitelikleri, ancak bunu yalnızca bir giriş parçacığına değil, bir dizi