0

私はDjangoとプログラミング全般に不慣れです。スポーツの選手が管理者によって作成されたリーグにサインアップできるシンプルなサイトを作ろうとしています。models.py で、次の 2 つのモデルを作成しました。

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')

私が読んだことから、作成/更新/削除の一般的なビューを使用して、ユーザーがリーグにサインアップするためのフォームを表示できる可能性があります。したがって、私のアプリでは、ユーザーがリーグを一覧表示するシンプルなホームページにアクセスし、リーグをクリックして情報を入力してサインアップできるようにしたいと考えています。私の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())にありますurls.pycreate_object()引数を取りませんがobject_id、URL(r'^(?P<object_id>\d+)/info/create/$')で引数を指定しました。これは理にかなっています。オブジェクトを作成しているので、そのIDはまだわかりません。ドキュメントに記載されているように、または引数create_object()のみを取ります。form_classmodel

Infoオブジェクトに添付されたオブジェクトを作成しようとしていると思います。LeagueそのURLには、オブジェクト<object_id>のID番号が含まれています。Leagueその場合、そのID番号に名前を付けるのではなくr"^\d+/info/create/$"、URLとして使用する必要があります。create_object()ただし、Djangoの機能を使用してリーグID番号を取得する方法はわかりません。独自のビューハンドラーを作成する必要がある場合があります。ModelFormカスタムを使用してパラメータとともに渡すことができる場合がありform_classますが、よくわかりません。

于 2009-11-09T02:06:47.743 に答える