簡體   English   中英

Django request.user無法解析SimpleLazyObject

[英]Django request.user Not Resolving SimpleLazyObject

我的Django應用程序中有一個使用用戶ID查找對象的方法。 通過AJAX調用來調用此方法。 登錄到有效的用戶帳戶后,無論我如何嘗試, request.user評估為django.utils.functional.SimpleLazyObject對象,並且無法檢索所需的數據(當絕對存在時, SkillEntry匹配查詢不存在) 。 我在Django中嘗試了該解決方案:按用戶過濾草稿會導致錯誤 ,但無濟於事。

如何讓用戶引用用戶對象的實際實例?

查看代碼:

@login_required
def skill_set(request, name):
    skill = Skill.objects.get(slug=name) # Found.
    level = 0
    user = request.user
    if request.method == 'POST':
        if user.is_authenticated():
            entry = SkillEntry.objects.get(user=user.pk, skill=skill) # Not found.
            entry.level = request.POST['level']
            entry.save()
            return HttpResponse(status=200)
    else:
        return HttpResponseForbidden()

JavaScript客戶端代碼:

function setSkill(skill, value) {
  var req = new XMLHttpRequest();
  req.open("POST", "/skill/" + skill + "/set/", true);
  csrftoken = getCookie('csrftoken');
  req.setRequestHeader("X-CSRFToken", csrftoken);
  req.send('level=' + value);
  var elem = document.getElementById('level');
  elem.innerHTML = "My skill level is " + value + ".";
}

可能需要在請求中設置一些內容來維護會話信息嗎? 我可以發誓,在更早版本的Django上,我已經成功完成了類似的工作。 我正在使用1.4.3。

編輯:

這是我的models.py中的模型定義:

class Skill(models.Model):
    name = models.CharField(max_length=100)
    slug = models.CharField(max_length=100, blank=True)
    keywords = models.CharField(max_length=120, blank=True, help_text='List of additional keywords this skill should show up for in search')
    description = models.TextField(null=True, blank=True)
    parent = models.ForeignKey('Skill', null=True, blank=True, help_text='Parent skill.  Leave blank if this is a root category.')

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.name)
        super(Skill, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ('name',)

class SkillEntry(models.Model):
    skill = models.ForeignKey('Skill')
    level = models.IntegerField()
    user = models.ForeignKey(User)
    last_updated = models.DateField(auto_now=True)

    class Meta:
        verbose_name_plural = 'Skill Entries'
        ordering = ('skill__name',)

    def __unicode__(self):
        return self.user.username + ' knows ' + self.skill.name + ' at level ' + str(self.level)

正如羅漢所說,您不需要使用user.pk

更改此查詢

entry = SkillEntry.objects.get(user=user.pk, skill=skill) 

    entry = SkillEntry.objects.get(user=user, skill=skill) 

仍然,如果它不能正常工作,請分享您的模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM