複数のコンテンツタイプのフィールドを持つ最善の方法を見つけようとします。 私がこれまで行ってきたことはcontacttype CharFieldですと接触モデルです:私の目標は、ユーザーが別の連絡先情報を追加できるようにすることですDjango:1つのモデル、異なるフォームとウィジェットですか?
class Contact(models.Model):
CONTACT_TYPES = (
('email', 'Email'),
('phone', 'Phone'),
('address', 'Address'),
('facebook', 'Facebook'),
('linkedin', 'LinkedIn'),
('youtube', 'Youtube'),
('twitter', 'Twitter'),
('google', 'Google'),
)
teammember = models.ForeignKey(TeamMember)
description = models.CharField(max_length=100, null=True)
contacttype = models.CharField(max_length=100, choices= CONTACT_TYPES, default='email')
contact = models.TextField()
、プロフィールページに1つだけで一覧表示されwhich'llモデル。私はそれぞれのModelFormのクラスを考えていた
:/連絡先/追加/電子メールまたは/連絡先:
class ContactForm(ModelForm):
def __init__(self, data, *args, **kwargs):
super(ModelForm, self).__init__(data, *args, **kwargs)
self.contacttype = ""
class Meta:
model = Contact
fields = ['description', 'contact']
widgets = {'contact': TextInput()}
def clean_contacttype(self):
return self.contacttype
class ContactEmailForm(ContactForm):
def __init__(self, data, *args, **kwargs):
super(ContactForm, self).__init__(data, *args, **kwargs)
self.contacttype = "email"
class Meta(ContactForm.Meta):
model = Contact
fields = ['description', 'contact']
widgets = {'contact': EmailInput()}
class ContactPhoneForm(ContactForm):
def __init__(self, data, *args, **kwargs):
super(ContactForm, self).__init__(data, *args, **kwargs)
self.contacttype = "phone"
class Meta(ContactForm.Meta):
model = Contact
fields = ['description', 'contact']
widgets = {'contact': TextInput()}
def clean_contact(self):
cleaned_data = super(ContactForm, self).clean()
contact = cleaned_data.get("contact")
# Perform some phone number validations
return contact
その後は、私の見解では、私がリクエスト引数(例に応じて、正しいフォームを選ぶだろう/ add/phone)。
私はこれを行う最もエレガントな方法を見つけようとしているので、どんな助けも歓迎します。
読んでいただきありがとうございます。