0

꽤 일반적인 모델이있는 장고 응용 프로그램이 있습니다 (및 Organization). UserProfile 또는 Organization은 모두 0 ~ n 개의 전자 메일을 가질 수 있으므로 Email 모델의 전화 번호는 GenericForeignKey입니다. UserProfileOrganization 모델은 Email 모델 (아래 요약 코드)을 다시 가리키는 emails이라는 GenericRelation을 가지고 있습니다.0-5 개의 전자 메일 주소를 입력하는 장고 양식

질문 : : 0-12 개의 전자 메일 주소를 포함하여 조직 세부 정보를 입력 할 수있는 Organization 양식을 제공하는 가장 좋은 방법은 무엇입니까?

Organization보기를 만들려면 Django class-based view입니다. 나는 동적 인 폼을 생성하고 사용자가 필요한만큼 많은 이메일 주소를 추가 할 수 있도록 Javascript로 활성화시키는쪽으로 기울어 져있다. 트위터 부트 스트랩을 사용하여 사이트에 표시하기 위해 django-crispy-forms 및 django-floppyforms로 양식을 렌더링합니다.

양식에 BaseGenericInlineFormset이 삽입되어 있다고 생각했지만 이메일 주소가 과도한 것으로 보입니다. 클래스 기반보기에서 전달 된 양식에 formset을 포함하는 것도 번거로운 작업입니다.

Organizationphone_numberslocations 같은 문제가 발생합니다.

코드

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' 
+0

처럼 분할 할 수 있습니다 이것은 - 당신이 언급 한 것처럼 - 비록 과잉으로 보일지라도) formset을 사용하는 것입니다. –

+0

이 질문을 단순화하고 답변을 찾았습니다. http://stackoverflow.com/questions/12890919/django-class-based-views-and-formsets/12905947#12905947. – Erik

답변

2

당신이 할 수있는 이 양식을 사용하면 .split()을 사용해보십시오. 그러면 양식을 더 쉽게 볼 수 있고 사용자는 텍스트 필드를 계속 추가하지 않아도됩니다. 할 수있는 일은 하나의 텍스트 상자를 만들어 사용자가 여러 개의 이메일을 추가하고이를 혼수 상태로 구분할 수있게하는 것입니다. 다음보기에 당신은 이메일 유형

을 갖는 경우이

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 
+0

꽤 좋은 생각이지만 이메일 주소 (집, 사무실 등)와 함께 이메일 주소 자체를 저장합니다. 주소의 경우에 그것은 더 나빠집니다. 아이디어를 가져 주셔서 감사합니다. - 저는 아직이 문제로 고심하고 있습니다. – Erik

+0

아마도 도움이 될까요? – Jonathan

관련 문제