Python Django';用户';对象没有属性';目标';
我创建了一个函数,可以为每个用户保存多个目标,并将它们显示在html文件中。问题是,一旦我注销,我将无法使用相同的用户重新登录,因为我收到错误Python Django';用户';对象没有属性';目标';,python,html,django,Python,Html,Django,我创建了一个函数,可以为每个用户保存多个目标,并将它们显示在html文件中。问题是,一旦我注销,我将无法使用相同的用户重新登录,因为我收到错误user对象没有属性Goals,即使它保存在数据库中。我的问题是,是什么导致了这个错误,在我看来,对目标的引用可能,以及什么是潜在的解决方案?谢谢大家! models.py class Goals(models.Model): user = models.ForeignKey(User, null=True, default=None, on_de
user
对象没有属性Goals
,即使它保存在数据库中。我的问题是,是什么导致了这个错误,在我看来,对目标的引用可能,以及什么是潜在的解决方案?谢谢大家!
models.py
class Goals(models.Model):
user = models.ForeignKey(User, null=True, default=None, on_delete=models.CASCADE)
goal = models.CharField(max_length=2000)
instrument = models.CharField(max_length=255, choices=instrument_list, blank=True)
goal_date = models.DateField(auto_now=False, auto_now_add=False)
def __str__(self):
return self.Goals
@receiver(post_save, sender=User)
def create_user_goals(sender, instance, created, **kwargs):
if created:
Goals.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_goals(sender, instance, **kwargs):
instance.Goals.save()
class GoalsForm(ModelForm):
class Meta:
model = Goals
exclude = ('user',)
views.py
def goal_creation(request):
form = GoalsForm()
cur_goals = Goals.objects.filter(user=request.user)
if request.method == 'POST':
form = GoalsForm(request.POST)
if form.is_valid():
goals = form.save(commit=False)
goals.user = request.user
goals.save()
cur_goals = Goals.objects.filter(user=request.user)
return redirect('/student/goal-progress')
else:
form = GoalsForm()
context = {'form' : form, 'goals': cur_goals}
return render(request, 'student/goal_creation.html', context)
你有两个问题:
instance.Goals
访问子实例;您应该使用instance.goals\u set
保存查询集。您应该逐个保存目标
实例,即
话虽如此,我建议您将
Goals
类重命名为Goal
,因为这会与Django的命名约定产生混淆。这也是有意义的,因为每一行代表一个目标
尝试将相关的\u name='goals'
添加到目标类的用户字段定义中:
user = models.ForeignKey(User, related_name='goals', null=True, default=None, on_delete=models.CASCADE)
然后,您应该能够访问用户对象上的此属性:
user\u instance.goals.all()
可能需要迁移
虽然这与问题没有直接关系,但我认为最好以单数形式将模型类命名为“目标”,它将与其他模型的名称一致(模型表示一个对象=一行)并避免在自动多重化中出现歧义。我是否需要更改def str和def create_user_目标,因为它们使用的是目标对象而不是目标?对于我视图中的目标项,我也在想同样的事情,
\uuu str\uuu
方法没有意义,因为它已经应用于目标
实例,但是是的,您也应该删除它create\u user\u goals
看起来不错,因为它使用goals
类创建了一个新的模型实例。另外,当我尝试登录时,我收到一个错误,“user”对象没有属性“goals”。这个问题仍然存在,对于一些理性的商业来说,你应该考虑接受这个答案,如果这个修复是你在这里的问题:在你之前的问题中。你的<代码>并且您不需要在goals.save()之后定义cur\u goals=goals.objects.filter(user=request.user)
user = models.ForeignKey(User, related_name='goals', null=True, default=None, on_delete=models.CASCADE)