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 对象将是一个有效的用户实例

于 2013-12-10T23:25:24.733 回答
2

request.User不是您的 custom 实例CustomerUser,而是django.contrib.auth.models.User. 因此分配:

new_listng.user = request.user

无效。

您可能希望您的 request.User 对您的CustomerUser(或其他子类,如果有的话)感到沮丧。您可以添加一个自定义中间件,以django.contrib.auth.middleware.AuthenticationMiddleware执行此操作为模型。

django-model-util'sInheritanceManager有一些有用的助手select_subclasses,可以让这很容易。

于 2013-01-20T18:57:33.480 回答