我有model Person
或说个人资料,此class Person
与phonenumber类有一个泛系关系。现在我想生成一个ModelForm,显示一次添加两个或三个联系人号码的选项一个表格。这可能吗 ?
我的模型看起来像:
class Person(models.Model):
"""Person model"""
title = models.CharField(_('title'), max_length=20, null=True, blank=True)
first_name = models.CharField(_('first name'), max_length=100)
middle_name = models.CharField(_('middle name'), max_length=100, null=True,
blank=True)
last_name = models.CharField(_('last name'), max_length=100, null=True,
blank=True)
suffix = models.CharField(_('suffix'), max_length=20, null=True,
blank=True)
slug = models.SlugField(_('slug'), max_length=50, unique=True)
phone_number = generic.GenericRelation('PhoneNumber')
email_address = generic.GenericRelation('EmailAddress')
address = generic.GenericRelation('Address')
date_of_birth = models.DateField(_('date of birth'), null=True, blank=True) gender = models.CharField(_('gender'), max_length=1, null=True,
blank=True, choices=GENDER_CHOICES)
class PhoneNumber(models.Model):
"""Phone Number model."""
PHONE_LOCATION_CHOICES = (
('w', _('Work')), 315 ('m', _('Mobile')),
('f', _('Fax')),
('p', _('Pager')),
('h', _('Home')),
('o', _('Other')),
)
content_type = models.ForeignKey(ContentType, limit_choices_to{'app_label': 'contacts'})
object_id = models.IntegerField(db_index=True)
content_object = generic.GenericForeignKey()
phone_number = models.CharField(_('number'), max_length=50)
location = models.CharField(_('location'), max_length=1,
choices=PHONE_LOCATION_CHOICES, default='w')
date_added = models.DateTimeField(_('date added'), auto_now_add=True)
date_modified = models.DateTimeField(_('date modified'), auto_now=True)
然后我想制作一个表格来编辑接触细节。
我会非常感谢你! 谢谢!
此致
答案 0 :(得分:0)
通用关系:让对象拥有 任何对象的外键通过 content-type / object-id字段。一个 GenericForeignKey字段可以指向 任何物体,无论是动物,蔬菜, 或矿物质。
这意味着你可以做你想说的事情。
更新:添加一些代码。这将是您的forms.py
class EditForm(forms.Form):
title = forms.CharField(label='Username', max_length=30)
phone_num1= forms.CharField(label='Phone Number1',widget=forms.TextInput())
phone_num2= forms.CharField(label='Phone Number2',widget=forms.TextInput())
这可能是您的views.py
。在您的HTML代码中提供EDIT链接,其中包含某种格式的网址。此url格式应映射到urls.py文件中。哪个会调用这个fn。在views.py
。
if request.GET.has_key('edit'): # already there - EDIT
nameid = request.GET['edit']
try:
person = Person.objects.get(id=nameid)
phonenum = PhoneNumber.objects.get(user=request.user, person=person)
pnums = ' '.join(n.phone_number for n in person.phonenum_set.all())
except (PhoneNumber.DoesNotExist, Person.DoesNotExist):
raise
form = EditForm({'title:person.title, 'phonunumbers': phonenums})
这是一般的想法。我在浏览器中输入此内容可能会有一些语法错误...