Python 在django中定义一个用户和其他模型字段之间的关系
我一直在做一个测试项目,一个用户可以有多个项目,这些项目可以有多个承包商。承包商必须首先注册自己,他们可以在不同的项目上工作。问题是,在定义一个用户并添加多个项目以及多个承包商后,如果我尝试通过注册另一个用户登录,那么第二个用户也会出现相同的项目,即使不创建任何新项目,如何将特定用户的数据与其他用户的数据分开 以下是我的模型:Python 在django中定义一个用户和其他模型字段之间的关系,python,django,Python,Django,我一直在做一个测试项目,一个用户可以有多个项目,这些项目可以有多个承包商。承包商必须首先注册自己,他们可以在不同的项目上工作。问题是,在定义一个用户并添加多个项目以及多个承包商后,如果我尝试通过注册另一个用户登录,那么第二个用户也会出现相同的项目,即使不创建任何新项目,如何将特定用户的数据与其他用户的数据分开 以下是我的模型: class UserProfile(models.Model): ## the client is the user user=models.OneToO
class UserProfile(models.Model): ## the client is the user
user=models.OneToOneField(User)
def __unicode__(self):
return self.user.username
class Contractor(models.Model):
name=models.CharField(max_length=128)
url=models.URLField()
bill_rate=models.IntegerField(default=0)
slug=models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug=slugify(self.name)
super(Contractor, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
class Project(models.Model):
contractor=models.ManyToManyField(Contractor)
client=models.OneToOneField(UserProfile, null=True)
title=models.CharField(max_length=128)
slug=models.SlugField(unique=True)
contractor_hours=models.IntegerField(default=0)
def save(self, *args, **kwargs):
self.slug=slugify(self.title)
super(Project, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
以下是我注册新用户、承包商和仪表板视图的视图:
def user_login(request):
context_dict={}
if request.method=="POST":
username=request.POST.get('username')
password=request.POST.get('password')
user=authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect("/keeper/dashboard")
else:
return HttpResponse("Your account is disabled")
else:
print("Invalid login details: {0}, {1}".format(username, password))
return HttpResponse("Invalid Login details supplied")
else:
return render(request, 'keeper/index.html', {})
def addContractor(request):
context_dict={}
registered=False
if request.method=="POST":
contractor_form=ContractorForm(data=request.POST)
if contractor_form.is_valid():
contractor=contractor_form.save()
registered=True
else:
print contractor_form.errors
else:
contractor_form=ContractorForm()
return render(request, 'keeper/addContractor.html', {'contractor_form':contractor_form, 'registered':registered})
def dashboard(request):
context_dict={}
project_list=Project.objects.filter(client__user=request.user).order_by('-title')
contractor_list=Contractor.objects.order_by('-name')
context_dict['Projects']=project_list
context_dict['Contractors']=contractor_list
return render(request, 'keeper/dashboard.html', context_dict)
def addProject(request):
context_dict={}
if request.user.is_authenticated():
current_user=request.user.username
context_dict['user_name']=current_user
#print current_user
contractor_list=Contractor.objects.all()
context_dict['contractor_list']=contractor_list
if request.method=="POST":
form=ProjectForm(request.POST)
project_title=request.POST.get('title')
contractor_value=request.POST.get('contractor_selected')
contractor=Contractor.objects.get(name=contractor_value)
#print project_title, contractor
if form.is_valid():
form.save(commit=True)
get_recent_project=Project.objects.get(title=project_title)
#print get_recent_project
get_recent_project=Project.objects.get(title=project_title)
##print get_recent_project
get_recent_project.client=current_user
get_recent_project.save()
get_recent_project.contractor.add(contractor)
#print get_recent_project.contractor.all()
#print get_clientOfProject
return success(request)
else:
print form.errors
else:
form=ProjectForm()
context_dict['form']=form
else:
print "none"
return render(request, 'keeper/addProject.html', context_dict)
始终显示完整的项目列表,完全忽略承包商:
project_list=Project.objects.order_by('-title')
尝试按当前登录用户拥有的项目筛选项目:
project_list = Project.objects.filter(
client__user=self.request.user
).order_by('-title')
请注意,您还始终向每个承包商展示的不仅仅是与项目相关的承包商。嘿,我尝试使用您的解决方案,但它不起作用。因此,我找出了问题所在,并引导我找到了我的项目模型,在该模型中,我将UserProfile的客户端属性集用作foreignKey字段。我尝试将其更改为OneToOneField,但仍然不起作用。然后,我在“添加项目”视图中做了一些更改,并找到了将用户类实例传递到项目客户端字段所需的属性。因此,当我试图为当前客户获取项目列表时,我一个也没有得到。你能帮我吗?