Django Рекомендуемое поле содержимого - PullRequest
1 голос
/ 22 января 2010

Отправил вопрос вчера, но я не слишком ясно понял, что я пытаюсь сделать. Я изо всех сил пытаюсь найти какие-нибудь полезные учебные пособия о том, как лучше всего достичь этого, так что толчок в правильном направлении будет с благодарностью.

Я установил модель, которая ссылается на django_content_type. Моя идея состоит в том, чтобы использовать эту модель для ссылки на другие модели, чтобы их можно было пометить как «рекомендуемый» контент, без необходимости добавлять новое поле «isFeatured» в каждую модель.

Все, что я хочу сделать, - это установить флажок в формах моего администратора для каждой модели, который указывает, присутствует ли контент или нет.

class FeaturedContent(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

Во-первых, это правильный подход?

Нужно ли создавать поле формы / модели? и как мне ввести это поле в шаблон администратора?

Я заглянул внутрь (django.contrib.contenttypes) generic.py, и вы можете четко видеть, куда загружаются данные шаблона, а также какой шаблон используется. Мне интересно, возможно, мне нужно расширить этот класс, а не писать свое собственное поле?

Спасибо за любую помощь,

Джеймс

1 Ответ

0 голосов
/ 22 января 2010

На мой взгляд, это не правильный подход. Вам лучше использовать абстрактные базовые классы с BooleanField, например:

class FeaturedModel(models.Model):
    is_featured = models.BooleanField(default = False)

    class Meta:
        abstract = True

class Foobar(FeaturedModel):
    title = models.CharField(max_length = 200)
    ...

Таким образом, вы получаете все достоинства каждой модели, имея свое собственное поле is_featured, с которым вы можете играть, и никаких сложностей типов контента.

...