Установка Django ForeignKey для нескольких моделей - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть простая модель под названием WebProfile, в которой хранится URL-адрес веб-страницы и ее заголовок. Эта модель имеет модель ForeignKey to Student, которая позволяет мне сохранять закладки ученика.

Я хотел бы повторно использовать эту модель для хранения закладок, сохраненных учителями. Каков наилучший способ заставить владельца ForeignKey указывать на ученика или учителя?

Примечание: в моем реальном случае использования классы целевой модели концептуально сильно отличаются и не имеют общих полей, кроме ссылок WebProfile.

class Student(models.Model):
    ... 

class Teacher(models.Model):
    ... 

class WebProfile(models.Model):
    title = models.CharField(max_length=50)
    link = models.URLField()
    owner = models.ForeignKey('Student', on_delete=models.CASCADE, related_name="bookmarks")

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Если Teacher и Student относятся к модели User, вы можете изменить ForeignKey в WebProfile, чтобы вместо нее связать модель User.

Оттуда вы можете затем тренировки, когда вы получаете объект WebProfile независимо от того, является ли пользователь Student или Teacher.

0 голосов
/ 22 апреля 2020

Мне удалось решить проблему с помощью Generi c Отношения, как описано в Django Документация

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

class WebProfile(models.Model):
    title = models.CharField(max_length=50)
    link = models.URLField()
    owner_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    owner_id = models.PositiveIntegerField()
    owner = GenericForeignKey('owner_type', 'owner_id')

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