用于将数据库条目与if语句进行比较的django问题

时间:2011-07-27 13:45:34

标签: python django django-views

我的emp / views.py中有以下代码:

@ login_required
def peoples(request):

    list_a = []
    if request.user.username == People.objects.get(account=request.user.username):
            angestellte_list = People.objects.all()
            return render_to_response(("emp/people.html"), {'list_a': list_a})
    else:
            return HttpResponse("Nope, it doesn't works")

我总是得到else语句的打印输出。但为什么呢?

如果我在if语句中使用了一个明确的例子,例如

if request.user.username == 'bob':
....
....

我不明白。

编辑:

class People(models.Model): 
    empid = models.DecimalField(max_digits=19, decimal_places=0, primary_key=True)
    firstname = models.CharField(max_length=20, blank=True) 
    SHIFT_CHOICES=( ('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D'), ('N', 'N'),) 
    shift = models.CharField(max_length=1, choices=SHIFT_CHOICES, blank=True) 
    account = models.CharField(max_length=20, blank=True) 

    def __unicode__(self): 
        return self.lastname 
    class Meta: 
        db_table = u'people'

第二次编辑:

对于迟到的回答感到抱歉,但我没有太多时间对最后几天进行编码。我发现了这个问题。 People.objects.get(account = request.user.username)获取名称,但它删除第一个字符并将第二个字符大写,并且只有request.user.username采用确切的名称。 一个例子:

request.user.username = pstefan

Employee.objects.get(account = request.user.username)= Stefan

我这样解决了:

username  = str(request.user.username)[1:]
compare   = str(People.objects.get(account=request.user.username))
user_end  = username.replace(username[0], compare[0], 1)
if user_end == compare:
....

它有效,但我知道这不是最好的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您正在将用户名(CharField)与Person对象进行比较。试试:

if request.user == People.objects.get(...).account:

或者更好的是你可以使用:

import django.shortcuts as shortcuts
shortcuts.get_object_or_404(People, account=request.username)

答案 1 :(得分:0)

您需要确定Peoples对象上的“account”属性以及它与用户的关系。如果您可以发布Peoples模型,则可能更容易确定解决方案。