【发布时间】:2016-01-04 08:15:18
【问题描述】:
对于我的 django 项目,我有一个页面允许用户编辑他们的列表,为此我添加了一个检查,以确保打开页面的人是列表的所有者。但是,无论如何,我放入的 if 语句总是返回 true,即使我将它正在检查的内容更改为完全不相关的对象。我什至将它从 != 更改为 == 并且它总是返回 true,有人知道这里发生了什么吗?
@login_required(redirect_field_name='login')
def editlisting(request, pk):
post = JobListing.objects.get(pk=pk)
print(type(request.user))
print(type(post.user))
if request.user != post.user:
print("THIS WORKS") #This is for debugging
print(request.user) #This is for debugging
print(post.user) #This is for debugging
return redirect("index")
if request.method == "POST":
form = JobListingForm(request.POST, instance=post)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
return redirect('index')
else:
form = JobListingForm(instance=post)
context = {
"form": form
}
return render(request, "editlisting.html", context)
任何帮助表示赞赏!
编辑:
这是控制台中的内容- http://puu.sh/kBuuX/30501a9407.png
这也是我的模型代码
class JobListing(models.Model):
region_choice = (
('1', 'Auckland'),
('2', 'Wellington'),
('3', 'Christchurch')
)
industry_choice = (
('1', 'Accounting'),
('2', 'Agriculture, fishing & forestry'),
('3', 'Automotive'),
('4', 'Banking, finance & insurance'),
('5', 'Construction & Architecture'),
('6', 'Customer service'),
)
employment_type_choice = (
('1', 'Full Time'),
('2', 'Part Time'),
('3', 'One-off'),
('4', 'Other')
)
user = models.CharField(max_length=50)
job_title = models.CharField(max_length=30)
business_name = models.CharField(max_length=50)
pay_rate = models.FloatField()
employment_type = models.CharField(max_length=10, choices=employment_type_choice)
job_description = models.CharField(max_length=2000)
business_address_region = models.CharField(max_length=50, choices=region_choice)
business_address_suburb = models.CharField(max_length=50)
business_industry = models.CharField(max_length=50, choices=industry_choice)
contact_method = models.CharField(max_length=50)
active_listing = models.BooleanField(default=True)
class Meta:
verbose_name = 'Job Listing'
def __unicode__(self):
return "%s" % self.business_name
【问题讨论】:
-
它在你的“调试”中打印了什么?
-
在测试之前移动打印语句,并添加
print(type(request.user)); print(type(post.user))以确保您正在比较可比较的对象。 -
另外,尝试使用 .pk,当您期望来自同一个表的两个项目时,这是最简单的比较。
标签: python django if-statement