Shshzik
@Shshzik
Начинающий

Как задать несколько разных моделей в ForeignKey?

Есть несколько моделей.
class Page(models.Model):
    title = models.CharField('Заголовок', max_length=200)
    slug = models.SlugField(null=True, blank=True)
    content = models.TextField()
    template = models.CharField(max_length=200, verbose_name='Название шаблона старницы', blank=True, null=True)

    keyword = models.CharField(max_length=200, verbose_name='Кличевые слова', null=True, blank=True)
    description = models.CharField(max_length=200, verbose_name='Описание', null=True, blank=True)

    created = models.DateTimeField(auto_now_add=True, auto_now=False)

    def save(self, *args, **kwargs):
        self.slug = slugify(unidecode(self.title))
        super(Page, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('page', kwargs={
            'slug': self.slug,
        })

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Страница'
        verbose_name_plural = 'Страницы'

class News(models.Model):
    title = models.CharField(max_length=200, verbose_name='Заголовок')
    slug = models.SlugField(max_length=200, unique=True)
    pub_date = models.DateField(verbose_name='Дата публикации')
    intro_text = models.TextField(verbose_name='Краткий текст')
    full_text = models.TextField(verbose_name='Полный текст')
    hidden = models.BooleanField(default=False, verbose_name='Скрыт')
    image = models.ImageField(verbose_name='Изображение', null=True, upload_to='news/', blank=True)
    file = models.FileField(verbose_name='Файл',
                            help_text='Прикреплённое изображение', upload_to='file/', null=True, blank=True)
    keywords = models.CharField(max_length=200, verbose_name='Кличевые слова', null=True)
    descriptions = models.CharField(max_length=300, verbose_name='Описание', null=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(unidecode(self.title))
        super(News, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('news_page', kwargs={
            'slug': self.slug,
        })

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Новость'
        verbose_name_plural = 'Новости'

Нужно сделать еще один класс.
class Slider(models.Model):
    name = models.CharField(max_length=200, verbose_name='Название')
    link = models.ForeignKey()
    def __str__(self):
        return self.name

Как сделать так, что бы эта модель могла брать и из News, и из Page?
Нужно сделать ссылку или на одно или на другое. Как можно сделать лучше?
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
@deliro
Generic foreign key
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Если слайдеров несколько (sic)
class Slider(models.Model):
    name = models.CharField(max_length=200, verbose_name='Название')

class News(models.Model):
    in_slider = model.ForeignKey(Slider)

class Page(models.Model):
    in_slider = model.ForeignKey(Slider)


Если слайдер 1
class News(models.Model):
    in_slider = model.BooleanField()

class Page(models.Model):
    in_slider = model.BooleanField()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы