与使用模型的表单相关的问题

时间:2010-11-29 09:47:21

标签: python django

我有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)

然后我想制作一个表格来编辑接触细节。

我会非常感谢你! 谢谢!

此致

1 个答案:

答案 0 :(得分:0)

根据Django Doc

  

通用关系:让对象拥有   任何对象的外键通过   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})

这是一般的想法。我在浏览器中输入此内容可能会有一些语法错误...