我编写了以下代码:
class Market(models.Model):
name = models.CharField(max_length=200)
class Fixture(models.Model):
home = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="home")
away = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="away")
league = models.ForeignKey(League, on_delete=models.CASCADE, blank=True)
round = models.CharField(max_length=200, default=None, blank=True, null=True)
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return u'{0} - {1}'.format(self.home.name, self.away.name)
class Prediction(models.Model):
market = models.ForeignKey(Market, on_delete=models.CASCADE, blank=True)
fixture = models.ForeignKey(to=Fixture, on_delete=models.CASCADE, related_name="fixture", null=True, blank=True)
我正在尝试使用以下代码将所有预测附加到一个装置:
f = Fixture.objects.get(sofascore_id="8645471").prediction_set
但这会产生以下错误:
AttributeError: 'Fixture' object has no attribute 'prediction_set'
我在这里做错了什么?
最佳答案
related_name=…
parameter [Django-doc]指定反向关系的名称,因此来自 Fixture
到Prediction
s。如果不设置,则默认为 <i>sourcemodel</i>_set
,但由于您将其设置为 'fixture'
,这当然行不通。
例如,您可以将其定义为:
class Prediction(models.Model):
market = models.ForeignKey(Market, on_delete=models.CASCADE, blank=True)
fixture = models.ForeignKey(
to=Fixture,
on_delete=models.CASCADE,
<b>related_name='predictions'</b>,
null=True,
blank=True
)
然后你可以查询:
f = Fixture.objects.get(sofascore_id='8645471')<b>.predictions.all()</b>
但查询可能会更好:
f = Prediction.objects.filter(<b>fixture__sofascore_id='8645471'</b>)
关于python - 属性错误: '…' object has no attribute '_set' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61977965/