我的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:
....
它有效,但我知道这不是最好的方法。有什么建议吗?
答案 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模型,则可能更容易确定解决方案。