Как я могу дать внешний ключ двум моделям (чтобы представлять журналы активности) - PullRequest
0 голосов
/ 30 марта 2020

Проблема в том, что мне нужно дать ссылку на внешний ключ для двух разных моделей, чтобы записывать журналы активности пользователя

У меня есть модель с именем Activity Log для записи действий, выполненных пользователем

class ActivityLog(models.Model):
    target = models.ForeignKey(Build, on_delete=models.CASCADE, null=True, blank=True)
    # Target, (Optional) The object to which the activity was performed.
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # Actor  The object that performed the activity.
    action_object = models.ForeignKey(Team, on_delete=models.CASCADE, null=True, blank=True)
    # Action Object. (Optional) The object linked to the action itself.
    content = models.TextField()
    # Content of the activity
    timestamp = models.DateTimeField()

Мне нужно указать целевое поле с внешним ключом для двух разных моделей. Можно ли использовать родовые c отношения?

1 Ответ

0 голосов
/ 30 марта 2020

Да, используйте родовые c отношения

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models

class ActivityLog(models.Model):
    target_type = models.ForeignKey(ContentType)
    target_id = models.Charfield(max_length=50)
    target = GenericForeignKey('target_type', 'target_id')
    ...
    content = models.TextField()

# Usage   
target1 = Foo.objects.get(...)
target2 = Bar.objects.get(...)

ActivityLog(target=target1, content="Did something to foo").save()
ActivityLog(target=target2, content="Did something to bar").save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...