Джанго Внешний Ключ - PullRequest
       3

Джанго Внешний Ключ

0 голосов
/ 21 марта 2011

Я пытаюсь сгенерировать отчет по 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)

Очевидно, что 2 таблицы имеют идентификаторы автоматического приращения в качестве первичного ключа.

Отчет будет выглядеть следующим образом:

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

Все участники будут включены в таблицу участников.Идентификатор репортера - это идентификатор участника, который зарегистрировал отчет.Report_id - это идентификатор человека, о котором написано в отчете.Мне нужно объединить две модели, чтобы узнать имена участников и их телефонные номера.Я не могу разобраться с документом.Я полагаю, что я должен сделать report_id и reporter_id оба внешних ключа в поле идентификатора первичного ключа таблицы Members.Как мне это сделать, и какой код будет извлекать отчет для всех записей, представленных определенным репортером?

Являюсь ли я пользователем reports_id = models.ForeignKey (Members) и делаю то же самое для reporter_id.Это кажется странным, так как я не указываю поле, чье поле чуждо.ORM должен сделать это легче (и обычно это делает!).Я мог бы сделать это с помощью объединения в SQL, но это поставило меня в тупик.

Надеюсь, вопрос имеет смысл.

Заранее спасибо

Богат

1 Ответ

0 голосов
/ 21 марта 2011

Как мне это сделать и какой код извлечь отчет для всех записей представленный конкретным журналистом?

Да, сделать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...