Django外键

时间:2011-03-21 18:29:09

标签: mysql django

我正在尝试生成2个模型/表格的报告。他们在这里:

class Members(models.Model):
    username          = models.CharField(max_length=30,null=True, unique=True)
    email             = models.CharField(max_length=100,null=True, unique=True)
    name              = models.CharField(max_length=30,null=True)
    phone             = models.CharField(max_length=30,null=True)

class Report(models.Model):
    report_text    = models.CharField(max_length=500)
    reporter_id    = models.IntegerField(db_index=True)
    reported_id    = models.IntegerField(db_index=True)
    date_created   = models.DateTimeField(null=True)
    date_read      = models.DateTimeField(null=True)

这两个表显然有自动增量ID作为主键。

报告将如下所示:

Reported Phone | Reported Name | Report | Date Reported | Date Report Read

报告的每个人都将在会员表中。记者ID是记录报告的成员的ID。 reported_id是报告所在人员的ID。我需要在两个模型中进行联接以获取会员姓名和电话号码。我不能完全按照文档进行操作。我相信我应该将reported_id和reporter_id作为Members表主键ID字段的两个外键。我该如何做,以及哪些代码将为特定记者提交的所有条目提取报告?

我是否使用report_id = models.ForeignKey(成员)并对reporter_id执行相同的操作。这似乎很奇怪,因为我没有指定该字段是外来的字段。 ORM应该让它变得更容易(而且通常会这样做!)。我可以通过SQL中的连接来做到这一点,但这让我很难过。

我希望这个问题有道理。

提前致谢

1 个答案:

答案 0 :(得分:0)

  

我该怎么做以及代码会是什么   提取所有条目的报告   由特定记者提交?

是的,请reported_id = models.ForeignKey(Members)

该字段将是目标模型主键,因为您没有指定一个主键,因此在您的情况下id

您需要为其中一个字段指定related_name,以防止反向外键访问者发生名称冲突。

设置外键字段后,要通过该外键获取所有相关对象,请使用related_name查询相关模型。

http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

例如,如果您将模型设置为:

reporter = models.ForeignKey(Members, related_name="reports_by_me")
reported = models.ForeignKey(Members, related_name="reports_by_others")

您可以通过

通过该外键访问所有相关的Report模型
member_instance.reports_by_me.all()
member_instance.reports_by_others.all()