0

現在、入力したドメインをデータベースに送信するモデル フォームがあります。

私が遭遇している問題は、db 側で PK-FK 関係を満たすためにドメインが送信されたときに、現在ログインしているユーザーの ID (django.auth テーブルの PK) を保存する必要があることです。

私は現在持っています:

class SubmitDomain(ModelForm):
    domainNm = forms.CharField(initial=u'Enter your domain', label='')
    FKtoClient = User.<something>

    class Meta:
        model = Tld #Create form based off Model for Tld
        fields = ['domainNm']

def clean_domainNm(self):
    cleanedDomainName = self.cleaned_data.get('domainNm')
    if Tld.objects.filter(domainNm=cleanedDomainName).exists():
        errorMsg = u"Sorry that domain is not available."
        raise ValidationError(errorMsg)
    else:
        return cleanedDomainName

views.py

  def AccountHome(request):
    if request.user.is_anonymous():
        return HttpResponseRedirect('/Login/')

    form = SubmitDomain(request.POST or None) # A form bound to the POST data

    if request.method == 'POST': # If the form has been submitted...
        if form.is_valid(): # If form input passes initial validation...
            domainNmCleaned = form.cleaned_data['domainNm']  ## clean data in dictionary
            clientFKId = request.user.id
            form.save() #save cleaned data to the db from dictionary`

            try:
                return HttpResponseRedirect('/Processscan/?domainNm=' + domainNmCleaned)
            except:
                raise ValidationError(('Invalid request'), code='300')    ## [ TODO ]: add a custom error page here.
    else:
        form = SubmitDomain()

    tld_set = request.user.tld_set.all()

    return render(request, 'VA/account/accounthome.html', {
        'tld_set':tld_set, 'form' : form
    })

問題は、次のエラーが表示されることです: (1048、「列 'FKtoClient_id' は null にすることはできません」)、非常に奇妙なことが起こっていFKtoClientます。何か案は?7L7

誰かが助けてくれれば、本当に感謝します

4

3 に答える 3

2

まず、FKtoClientフォームから削除します。リクエストオブジェクトを使用できるビューでユーザーを設定する必要があります。現在のユーザーを自動的に設定するフォームに属性を設定することはできません。

tldフォームをインスタンス化するとき、既にユーザー セットを持つインスタンスを渡すことができます。

def AccountHome(request):
    # I recommend using the login required decorator instead but this is ok
    if request.user.is_anonymous():
        return HttpResponseRedirect('/Login/')

    # create a tld instance for the form, with the user set
    tld = Tld(FKtoClient=request.user)
    form = SubmitDomain(data=request.POST or None, instance=tld) # A form bound to the POST data, using the tld instance

    if request.method == 'POST': # If the form has been submitted...
        if form.is_valid(): # If form input passes initial validation...
            domainNm = form.cleaned_data['domainNm']
            form.save() #save cleaned data to the db from dictionary

            # don't use a try..except block here, it shouldn't raise an exception
            return HttpResponseRedirect('/Processscan/?domainNm=%s' % domainNm)
    # No need to create another form here, because you are using the request.POST or None trick
    # else:
    #    form = SubmitDomain()

    tld_set = request.user.tld_set.all()

    return render(request, 'VA/account/accounthome.html', {
         'tld_set':tld_set, 'form' : form
    })

userこれには、必要に応じてフォーム内のメソッドにアクセスできるという@ dm03514の回答よりも利点がありますself.instance.user

于 2013-10-31T15:58:01.957 に答える
0

リクエスト オブジェクトからログイン ユーザーを取得できます。

current_user = request.user
于 2013-10-31T15:53:20.243 に答える