0

かなり一般的なモデルを含むDjangoアプリケーションがあります:UserProfileOrganization。AUserProfileまたはanOrganizationは両方とも0からnの電子メールを持つことができるので、私は。Emailを持つモデルを持っていGenericForeignKeyます。 UserProfileおよびOrganizationモデルには両方とも、モデルを指すGenericRelation呼び出しがあります(以下に要約コードを提供します)。emailsEmail

質問Organization:ユーザーが0からn個の電子メールアドレスを含む組織の詳細を入力できるフォームを提供するための最良の方法は何ですか?

私のOrganization作成ビューはDjangoクラスベースのビューです。私は動的フォームを作成し、Javascriptでそれを有効にして、ユーザーが必要な数の電子メールアドレスを追加できるようにすることに傾倒しています。Twitter Bootstrapを使用してサイトに表示するために、django-crispy-formsとdjango-floppyformsを使用してフォームをレンダリングします。

フォームに埋め込まれた状態でこれを行うことを考えましたBaseGenericInlineFormsetが、これは電子メールアドレスにとってはやり過ぎのようです。クラスベースのビューによって提供されるフォームにフォームセットを埋め込むのも面倒です。

Organizationフィールドphone_numbersと。でも同じ問題が発生することに注意してくださいlocations

コード

emails.py:

from django.db import models
from parent_mixins import Parent_Mixin

class Email(Parent_Mixin,models.Model):
    email_type = models.CharField(blank=True,max_length=100,null=True,default=None,verbose_name='Email Type')
    email = models.EmailField()

    class Meta:
        app_label = 'core'

Organizations.py:

from emails import Email
from locations import Location
from phone_numbers import Phone_Number
from django.contrib.contenttypes import generic
from django.db import models

class Organization(models.Model):
    active = models.BooleanField()
    duns_number = models.CharField(blank=True,default=None,null=True,max_length=9)  # need to validate this
    emails = generic.GenericRelation(Email,content_type_field='parent_type',object_id_field='parent_id')
    legal_name = models.CharField(blank=True,default=None,null=True,max_length=200)
    locations = generic.GenericRelation(Location,content_type_field='parent_type',object_id_field='parent_id')
    name = models.CharField(blank=True,default=None,null=True,max_length=200)
    organization_group = models.CharField(blank=True,default=None,null=True,max_length=200)
    organization_type = models.CharField(blank=True,default=None,null=True,max_length=200)
    phone_numbers = generic.GenericRelation(Phone_Number,content_type_field='parent_type',object_id_field='parent_id')
    taxpayer_id_number = models.CharField(blank=True,default=None,null=True,max_length=9)  # need to validate this

    class Meta:
        app_label = 'core'

parent_mixins.py

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.db import models

class Parent_Mixin(models.Model):
    parent_type = models.ForeignKey(ContentType,blank=True,null=True)
    parent_id = models.PositiveIntegerField(blank=True,null=True)
    parent = generic.GenericForeignKey('parent_type', 'parent_id')

    class Meta:
        abstract = True
        app_label = 'core'
4

1 に答える 1

2

.split() を使用すると、フォームが見やすくなり、ユーザーはテキスト フィールドを追加し続ける必要がなくなります。あなたができることは、ユーザーが複数の電子メールを追加してカンマで区切ることができる1つのテキストボックスを作成することです. そして、あなたの見解でこれを行うことができます

email = emails.split(',')
for i in emails:
    #assign email and save.

メールタイプの場合

そのようなシステムを構築することは、まだ良い考えかもしれません。あなたにできることは

abc@gmail.com-仕事、xyz@k.com-学校

そして、あなたはこのようにそれらを分割することができます

email-type=email.split(',')
for i in email-type:
    email=i.split('-')[0]
    if i.split('-')[1]:
        type=i.split('-')[1]
    else:
        #give it a default type
于 2012-10-15T19:13:26.537 に答える