Проблема, связанная с формами с использованием моделей - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть model Person или, скажем, Profile, и у этого class Person есть genericRelationhip с классом 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 голосов
/ 29 ноября 2010

Согласно 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-коде предоставьте ссылку РЕДАКТИРОВАТЬ, которая имеет URL в некотором формате. Этот формат URL должен отображаться в вашем файле urls.py. Который вызвал бы этот фн. в 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})

Это общая идея. Может быть какая-то ошибка синтаксиса, когда я набираю это в браузере ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...