2

ログインしている現在のユーザーの下に追加を保存したいのですが、件名に記載されているエラーが表示され続けます。

私のモデル:

    class CustomUser(User):
        nickname = models.CharField(max_length=255)
        phone = models.CharField(max_length=255)
        address = models.CharField(max_length=255)
        objects = UserManager()
        city = models.ForeignKey(locations, unique=False)

        def __str__(self):
            return self.nickname

        class Admin:
            pass

class listings(models.Model):
    title = models.CharField(max_length=255)
    category = models.ForeignKey('category')
    description = models.CharField(max_length=255)
    published = models.DateField(auto_now=True)
    user = models.ForeignKey(CustomUser, unique=False)

    def __str__(self):
        return self.naslov

    class Admin:
        pass

フォーム:

class jobOfferForm(forms.ModelForm):
    title = forms.CharField(max_length=255)
    description = forms.CharField(max_length=255)
    category = forms.ModelChoiceField(queryset=kategorii.objects.all())

    class Meta:
        model = listings

テンプレート:

  <div class="span8">
    <form action="" method="POST">

            {% csrf_token %}
            {{form.as_p}}
                <input type="submit" name="submit" value="Save"/>
    </form>
  </div>

景色!

def displisting(request):
    if request.method == 'POST':
        form = jobOfferForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data['title']
            description = form.cleaned_data['description']
            new_listng = form.save(commit = False)
            new_listng.user = request.user
            new_listng.object.save()

            return HttpResponseRedirect('/listing/review')
    else:
        form = jobOfferForm()

    return render(request,'listings.html',{'form':form,})

カスタムユーザーがそれを妨げているのではないかと心配していますか? しかし、追加の属性が必要ですか?

4

2 に答える 2

3

このエラーは、ユーザーがログインしていない場合に発生します。

バンドルされた /admin サイトを使用してログインすると、 request.user オブジェクトは有効な User インスタンスになります

于 2013-12-10T23:25:24.733 に答える
2

request.Usercustom のインスタンスではなくCustomerUserdjango.contrib.auth.models.User. したがって、割り当て:

new_listng.user = request.user

無効です。

おそらく、request.User を自分CustomerUser(または他のサブクラスがある場合) にダウンキャストする必要があります。これを実行する、モデル化されたカスタム ミドルウェアを追加できますdjango.contrib.auth.middleware.AuthenticationMiddleware

django-model-utilInheritanceManagerselect_subclassesには、これを簡単にする便利なヘルパーがいくつかあります。

于 2013-01-20T18:57:33.480 に答える