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'. 我究竟做错了什么?

4

1 回答 1

0

问题不在于您的模型,而在于您的“创建” URL 调用的函数——调用django.views.generic.create_update.create_object(). 不带参数,但您在 url ( ) 中指定了一个参数。这是有道理的——你正在创建一个对象,所以你还不知道它的 ID。只需要一个or参数,如docs中所述。urls.pycreate_object()object_idr'^(?P<object_id>\d+)/info/create/$'create_object()form_classmodel

我猜您正在尝试创建一个Info附加到对象的League对象,并且在该 URL 中,<object_id>League对象的 ID 号;在这种情况下,您不应命名该 ID 号,而应仅将r"^\d+/info/create/$"其用作 URL。不过,我不确定您将如何使用 Django 的create_object()功能获取联赛 ID 号。您可能必须编写自己的视图处理程序。您也许可以使用自定义ModelForm并将其与form_class参数一起传递,但我不确定。

于 2009-11-09T02:06:47.743 回答