꽤 일반적인 모델이있는 장고 응용 프로그램이 있습니다 (및 Organization
). UserProfile
또는 Organization
은 모두 0 ~ n 개의 전자 메일을 가질 수 있으므로 Email
모델의 전화 번호는 GenericForeignKey
입니다. UserProfile
및 Organization
모델은 Email
모델 (아래 요약 코드)을 다시 가리키는 emails
이라는 GenericRelation
을 가지고 있습니다.0-5 개의 전자 메일 주소를 입력하는 장고 양식
질문 : : 0-12 개의 전자 메일 주소를 포함하여 조직 세부 정보를 입력 할 수있는 Organization
양식을 제공하는 가장 좋은 방법은 무엇입니까?
내 Organization
보기를 만들려면 Django class-based view입니다. 나는 동적 인 폼을 생성하고 사용자가 필요한만큼 많은 이메일 주소를 추가 할 수 있도록 Javascript로 활성화시키는쪽으로 기울어 져있다. 트위터 부트 스트랩을 사용하여 사이트에 표시하기 위해 django-crispy-forms 및 django-floppyforms로 양식을 렌더링합니다.
양식에 BaseGenericInlineFormset
이 삽입되어 있다고 생각했지만 이메일 주소가 과도한 것으로 보입니다. 클래스 기반보기에서 전달 된 양식에 formset을 포함하는 것도 번거로운 작업입니다.
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'
처럼 분할 할 수 있습니다 이것은 - 당신이 언급 한 것처럼 - 비록 과잉으로 보일지라도) formset을 사용하는 것입니다. –
이 질문을 단순화하고 답변을 찾았습니다. http://stackoverflow.com/questions/12890919/django-class-based-views-and-formsets/12905947#12905947. – Erik