1

これは重複した質問かもしれませんが、ここで答えが見つかりません。2 つの異なるモデルを取ることができるメソッドを作成しようとしています。Post モデルと Comment モデルがあり、vote_up メソッドでこれらの両方の投票を処理したいと考えています。

ビュー.py

def vote_up(request, obj): #portotype not working atm...
    if isinstance(obj, Post):
        o = Post.objects.get(id=obj.id)
    elif isinstance(obj, Comment):
        o = Comment.objects.get(id=obj.id)
    else:           
        return HttpResponseRedirect(request.META.get('HTTP_REFERER')) #add 'something went wrong' message
    o.votes += 1    
    o.save()    
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

urls.py

urlpatterns = patterns('',
    url(r'^vote_up/(?P<obj>\d+)/$', 'post.views.vote_up'),
    url(r'^post_vote_down/(?P<post_id>\d+)/$', 'post.views.post_vote_down'), # works fine no instance check here, using separate methods for Post/Comment
    url(r'^comment_vote_down/(?P<comment_id>\d+)/$', 'post.views.comment_vote_down'),
) 

私が得るエラーは私の既存の URL をリストしています: 現在の URL、post/vote_up/Post オブジェクトは、これらのいずれとも一致しませんでした。または 現在の URL、post/vote_up/Comment オブジェクトがこれらのいずれにも一致しませんでした。

\d+ が悪役だと思いますが、正しい構文が見つからないようです。

4

4 に答える 4

4

Burhan が言うように、URL でオブジェクトを送信することはできず、キーのみを送信します。しかし、別の方法として、モデルを URLconf 自体に含めることもできます。単一のパターンを使用できますが、そこでモデル名も取得できます。

url(r'^(?P<model>post|comment)_vote_down/(?P<pk>\d+)/$', 'post.views.post_vote_down'),

)

次にビューで:

def vote_up(request, model, pk):
    model_dict = {'post': Post, 'comment': Comment}
    model_class = model_dict[model]
    o = model_class.objects.get(pk=pk)
于 2013-09-10T10:15:49.400 に答える
0

URL でコメントと投稿を区別する必要があります。

urls.py

url(r'^vote_up/(?P<object_name>\w+)/(?P<id>\d+)/$', 'post.views.vote_up'),

ビュー.py

def vote_up(request, object_name, id):
    if object_name == 'comment':
        # get id for comment
    if object_name == 'post':
        # get id for post
    else:
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
于 2013-09-10T10:13:13.957 に答える
0

これを変える:

 url(r'^vote_up/(?P<obj>\d+)/$', 'post.views.vote_up'),

url(r'^vote_up/(?P<obj>[-\w]+)/$', 'post.views.vote_up'),

\d+整数のみを意味します。

于 2013-09-10T09:58:37.367 に答える