Djangoでカレンダーを実装していて、機能を拡張して定期的なイベントのサポートを追加したいと考えています。私の問題は、1日または複数日のイベントと定期的なイベントを切り替えるBooleanFieldが欲しいということです。したがって、フィールドには次のようなラベルが付けられます。これは定期的なイベントですか?ユーザーがチェックボックスをオンにすると、開始フィールドと終了フィールドが変更され、別のフィールドが表示されます。
これが私のmodel.pyの簡単なバージョンです
class Event(models.Model):
title = models.CharField(max_length=40)
description = models.TextField(blank=True)
is_recurring = models.BooleanField(blank=True, default=False, verbose_name='Event is recurring?')
start = models.DateTimeField()
end = models.DateTimeField()
def __str__(self):
return self.title
また、ユーザーがis_recurringフィールドをチェックした場合は、これら2つのフィールドを動的に削除し、フォームを変更します。これが私のadmin.pyです:
class EventAdmin(admin.ModelAdmin):
form = EventForm
fieldsets = [
(None, {'fields': [
'title',
'description'
]
}
),
(None, {'fields': [
'is_recurring',
'start',
'end',
]
}
),
] # END fieldset
def get_fieldsets(self, *args, **kwargs):
return(
(None, {
'fields' : ('my_extra_field',),
}),
)
admin.site.register(Event , EventAdmin)
これが私のforms.pyです
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
self.fields['my_extra_field'] = forms.CharField()
class Meta:
model = Event
だからここで私はmy_extra_field
それを試すためにフォームに追加しようとしていました、しかし私は得続けます
イベントに指定された不明なフィールド(my_extra_field)。クラスEventAdminのフィールド/フィールドセット/除外属性を確認してください。
自分のフィールドを取得する方法が見つかりません。を使用しているためfieldsets
か、使用しないことを提案したいという印象がありますが、残念ながら、質問に適したものにするためにモデルから削除した情報がたくさんあるため、使用する必要があります。fieldsets
。
質問をまとめるために、チェックボックスにフィールドベースを動的に追加する方法を知りたいのですが。質問の拡張として、フォームから2つのフィールドを削除するにはどうすればよいですか?
フィールドセットで使用できるように、追加のフィールドがフォームに存在する必要があります。
class EventForm(forms.ModelForm):
my_extra_field = forms.CharField()
class Meta:
model = Event
exclude = tuple() # Required in recent Django versions.
# Be careful not to include fields by accident.
余分なフィールドをどう処理するかわからないsave()
ため、フォームを上書きModelForm
する必要があります。
class EventForm(forms.ModelForm):
my_extra_field = forms.CharField()
def save(self, *args, **kwargs):
if self.cleaned_data['is_recurring']:
# do something with your extra fields,
# remove values from other fields, etc.
super(EventForm, self).save(*args, **kwargs)
ページをリロードせずにフォームを変更する場合は、Javascriptを使用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加