Django文档说我应该能够像下面那样做到这一点:
class comp_name(models.Model):
competition_type = models.ForeignKey(comptype, verbose_name='Level')
competition_name = models.CharField(verbose_name='Division',max_length = 60)
comp_style = models.CharField(verbose_name='HT/SC', max_length = 20)
def __unicode__(self):
return str(self.competition_type) + " " + self.competition_name + " "+ self.comp_style
class peaople(models.Model):
comp_name = models.ForeignKey(comp_name, blank=True, related_name="competition_name" ,verbose_name='Division')
heat_num = models.ForeignKey(comp_name,blank=True, related_name="heat_number")
但是这样做会给我带来这个错误:
in __init__
assert isinstance(to, six.string_types), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
AssertionError: ForeignKey(<django.db.models.fields.related.ForeignKey>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'
我到底错在了什么?
我正在尝试从同一个模型中添加两个外键
答案 0 :(得分:1)
至于你的问题的答案:是。您可以向模型添加多个连接到同一个表的外键。只有你必须考虑的是给他们不同的related_name
值,就像你一样。
至于你得到的错误;您在comp_name
模型中创建了一个名为peaople
的ForeignKey字段,该字段实际上影响了上面定义的另一个名为comp_name
的模型。您应该将字段的名称更改为其他名称,然后您的问题将得到解决。
注意:假设comptype
是定义竞争类型的另一个模型。
class Competition(models.Model):
competition_type = models.ForeignKey(CompetitionType, verbose_name='Level')
name = models.CharField(verbose_name='Division',max_length=60)
style = models.CharField(verbose_name='HT/SC', max_length=20)
def __unicode__(self):
return "{} {} {}".format(self.competition_type, self.name, self.style)
class Competitor(models.Model):
competition_name = models.ForeignKey(Competition, blank=True, related_name="competition_name" ,verbose_name='Division')
heat_num = models.ForeignKey(Competition, blank=True, related_name="heat_number")
我建议您遵循正确的命名约定。有关详细信息,请参阅PEP8文档。
答案 1 :(得分:-2)
外键不应为空。删除blank = True