2009-11-09 3 views
0

Я новичок в Django и программировании в целом. Я пытаюсь сделать простой сайт, который позволяет игрокам спорта зарегистрироваться для лиг, которые были созданы администратором. В моем models.py я создал две модели:отношение моделей друг к другу с использованием общих представлений

from django.db import models 
from django.forms import ModelForm 

class League(models.Model): 
    league_name = models.CharField(max_length=100) 
    pub_date = models.DateTimeField('date published') 

class Info(models.Model): 
    league = models.ManyToManyField(League) 
    name = models.CharField(max_length=50) 
    phone = models.IntegerField() 
    email = models.EmailField() 
    def __unicode__(self): 
     return self.info 

class InfoForm (ModelForm): 
    class Meta: 
     model = Info 
     exclude = ('league') 

Из того, что я прочитал, я, вероятно, могу использовать Create/Update/Delete общих представлений для отображения формы для пользователя, чтобы подписаться на лигу , Поэтому с моим приложением я хочу, чтобы пользователь зашел на простую домашнюю страницу, в которой перечислены лиги, можно нажать на лигу и ввести свою информацию для регистрации. Вот что мой URLconf выглядит следующим образом:

from django.conf.urls.defaults import * 
from mysite.player_info.models import League, Info, InfoForm 

info_dict = { 
    'queryset': League.objects.all(), 
} 

InfoForm = {'form_class' : InfoForm} 

urlpatterns = patterns('', 
    (r'^$', 'django.views.generic.list_detail.object_list', info_dict), 
    (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict), 
    url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='player_info/results.html'), 'league_results'), 
    (r'^(?P<object_id>\d+)/info/create/$', 'django.views.generic.create_update.create_object', InfoForm), 
) 

Вот моя проблема: Когда я нажимаю на лиге, чтобы подписаться на на домашней странице с моей текущей настройки, я получаю эту ошибку: TypeError at /league/1/info/create.... create_object() got an unexpected keyword argument 'object_id'. Что я делаю не так?

ответ

0

Проблема не с вашими моделями, а с функцией «творить» URL-адреса - строка, которая вызывает django.views.generic.create_update.create_object() в urls.py. create_object() не принимает аргумент object_id, но вы указали один из них в своем URL-адресе (r'^(?P<object_id>\d+)/info/create/$'). Это имеет смысл - вы создаете объект, так что вы не знаете его ID. create_object() принимает только аргумент form_class или model, как указано в docs.

Я предполагаю, что вы пытаетесь создать Info объект, который прикреплен к League объекта, и в этом URL, <object_id> это идентификационный номер League объекта; в этом случае вы не должны указывать этот идентификационный номер, а вместо этого следует использовать только адрес r"^\d+/info/create/$". Я не уверен, как вы возьмете идентификационный номер лиги, используя функцию Django create_object(). Возможно, вам придется написать свой собственный обработчик вида. Вы можете использовать пользовательский ModelForm и передать его с параметром form_class, но я не уверен.