AttributeError: '***' object has no attribute '***_set'
AttributeError: '***' object has no attribute '***_set'
如果有人能帮助我,我会很高兴。
我想做的是:在删除作者后,将所有 "votes" 更改为零。
class Author(models.Model):
"""Model representing an author."""
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
date_of_birth = models.DateField(null=True, blank=True)
date_of_death = models.DateField('died', null=True, blank=True)
class Meta:
ordering = ['last_name', 'first_name']
def get_absolute_url(self):
"""Returns the url to access a particular author instance."""
return reverse('catalog:author-detail', args=[str(self.id)])
def __str__(self):
"""String for representing the Model object."""
return '{0}, {1}'.format(self.last_name, self.first_name)
class Option(models.Model):
def default_votes():
d=Author.objects.all().first()
print(dir(d))
for a in d.option_set.all():
a.votes=0
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, default=default_votes())
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
但我得到:
File "C:\Users\chainsaw\Desktop\django-locallibrary-tutorial-master\django-loc
allibrary-tutorial-master\catalog\models.py", line 128, in default_votes
for a in d.option_set.all():
AttributeError: 'Author' object has no attribute 'option_set'
但是在shell中有这个属性。我可以改变它。我做错了什么?
您已将 default
值设置为 default=default_votes()
因为 不是 "callable function",Django 在创建迁移文件期间采用 函数 的结果。
因此,将默认参数设置为可调用函数(仅提供函数,不带括号)
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, <b>default=default_votes</b>)
注意: 你的函数 default_votes
不是 return 任何东西,所以,return "appropriate value(s)" 来自函数.
小问题是您实际上不应该调用您的默认函数;只需删除 ()
:
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, default=default_votes)
如果有人能帮助我,我会很高兴。
我想做的是:在删除作者后,将所有 "votes" 更改为零。
class Author(models.Model):
"""Model representing an author."""
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
date_of_birth = models.DateField(null=True, blank=True)
date_of_death = models.DateField('died', null=True, blank=True)
class Meta:
ordering = ['last_name', 'first_name']
def get_absolute_url(self):
"""Returns the url to access a particular author instance."""
return reverse('catalog:author-detail', args=[str(self.id)])
def __str__(self):
"""String for representing the Model object."""
return '{0}, {1}'.format(self.last_name, self.first_name)
class Option(models.Model):
def default_votes():
d=Author.objects.all().first()
print(dir(d))
for a in d.option_set.all():
a.votes=0
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, default=default_votes())
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
但我得到:
File "C:\Users\chainsaw\Desktop\django-locallibrary-tutorial-master\django-loc
allibrary-tutorial-master\catalog\models.py", line 128, in default_votes
for a in d.option_set.all():
AttributeError: 'Author' object has no attribute 'option_set'
但是在shell中有这个属性。我可以改变它。我做错了什么?
您已将 default
值设置为 default=default_votes()
因为 不是 "callable function",Django 在创建迁移文件期间采用 函数 的结果。
因此,将默认参数设置为可调用函数(仅提供函数,不带括号)
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, <b>default=default_votes</b>)
注意: 你的函数 default_votes
不是 return 任何东西,所以,return "appropriate value(s)" 来自函数.
小问题是您实际上不应该调用您的默认函数;只需删除 ()
:
author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, default=default_votes)