我正在尝试生成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中的连接来做到这一点,但这让我很难过。
我希望这个问题有道理。
提前致谢
富
答案 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()