Можете ли вы объяснить этот код? - PullRequest
1 голос
/ 20 января 2010

Я изучал cnprog (клон django от stackoverflow) и наткнулся на этот код:

class Comment(models.Model):
    content_type   = models.ForeignKey(ContentType)
    object_id      = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    user           = models.ForeignKey(User, related_name='comments')
    comment        = models.CharField(max_length=300)
    added_at       = models.DateTimeField(default=datetime.datetime.now)

Итак, мой вопрос: «что такое content_object? И когда использовать родовые отношения?»

спасибо

1 Ответ

2 голосов
/ 20 января 2010

Я недавно наткнулся на эту удивительную особенность Django и, прочитав страницу документов , все прояснил.

Чтобы немного расширить, общие отношения - это когда вы хотите, чтобы Модель могла быть связана с более чем 1 другой Моделью. В приведенном выше примере, поскольку он использует GenericKey, комментарий может принадлежать нескольким моделям (таким как вопрос или ответ и т. Д.)

В моем конкретном примере использования у меня была модель AddressProfile, и я хотел, чтобы и модель User, и модель Company могли иметь AddressProfile. Изначально у меня просто было два ForeignKeys в AddressProfile с null = True, чтобы я мог указать, какое бы это отношение не было, но функциональность GenericKey сделала его намного чище для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...