0

説明: テンプレートはオートコンプリートを完全にレンダリングします...しかし、テストして「マネージャーの追加」をクリックすると、次のエラーが返されます:

Exception Type:     IntegrityError
Exception Value:    investments_managesfund.manager_id may not be NULL

私はこれを理解することはできません。POST では、csrf_token とマネージャーのユーザー名を送信しているためです。

マネージャーを追加して VIEWs.py に資金を提供します。

@login_required
    def add_manager_to_fund(request, fund_id):
        fund = get_object_or_404(Fund, id=fund_id)
        if request.POST['from'] == 'fund':
            if 'omnibox' in request.POST:
                manager = ManagerProfile.objects.get(user=request.user)
                if not ManagesFund.objects.filter(verified=True, fund=fund, manager=manager).exists() and not request.user.is_staff:
                    return HttpResponseRedirect('/profile/fund/' + fund_id + '/')       
                try:
                    mp = ManagerProfile.objects.get(user__username=request.POST['omnibox'])
                    fundManager = ManagesFund.objects.get(manager=mp, fund=fund, from_user=True)
                    if not fundManager.verified:
                        fundManager.verified = True
                        fundManager.save()
                except ObjectDoesNotExist:
                    fundManager, created = ManagesFund.objects.get_or_create(manager__user__username=request.POST['omnibox'], fund=fund, from_user=False)
                    if created:
                        fundManager.save()
        return HttpResponseRedirect('/profile/edit/fund/' + fund_id + '/')

オートコンプリート VIEWs.py:

@login_required
def managers(request):
    managers = ManagerProfile.objects.exclude(user=None)
    result = {}
    for manager in managers:
        result[manager.user.get_full_name()] = manager.user.username
    return HttpResponse(json.dumps(result))

オートコンプリート ビューはユーザー名を渡し、add_manager_to_fund() はユーザー名を受け取ります。これを修正するにはどうすればよいですか?

4

1 に答える 1

0

コードを再構築する必要があります。ObjectDoesNotExist を発生させている可能性のある呼び出しが try に 2 つあります。そのうちの 1 つに違いないと思いますが、どれかはわかりません。それはさておき、マネージャーを指定せずに ManagesFund を作成しているようです。それが IntegrityError の原因です。

ユーザー名からマネージャーを検索する必要がある場合(これはあなたがしようとしているようです)。get_or_create の前に実行してください。

于 2012-04-04T21:40:56.470 に答える