2011-03-21 89 views
0

我试图在2个模型/表格中生成报告。在这里,他们是:Django外键

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) 

的2个表显然有自动递增的ID作为主键。

报告将是这样的:

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

大家报道了将在成员表。记者ID是登录报告的成员的ID。 reported_id是报告所在人员的ID。我需要在两个模型之间进行连接以获取成员姓名和电话号码。我无法完成文档的工作。我相信我应该使reporting_id和reporter_id都是外键到成员表主键ID字段。我该如何做,以及哪些代码将提取特定记者提交的所有条目的报告?

用户reported_id = models.ForeignKey(成员),并为reporter_id执行相同操作。这似乎很奇怪,因为我没有指定该字段是外来字段。 ORM应该使它更容易(通常它会!)。我可以在SQL中加入,但这让我难住。

我希望这个问题有道理。

在此先感谢

丰富

+0

你绝对应该有通过外键访问所有相关Report车型' ForeignKey“字段,无论您希望表示模型之间的一对多关系。 – 2011-03-21 18:31:33

回答

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") 

您可以通过

member_instance.reports_by_me.all() 
member_instance.reports_by_others.all() 
+0

当然这个ForeignKey应该叫做'reported'?这将使用'reported_id'作为其基础数据库字段。 – 2011-03-21 18:56:02

+0

阿哈哈,你说的没错。捂脸! – 2011-03-21 18:57:10