2016-06-17 4 views
0

У меня есть три разных модели (Job, Tender, News).Дизайн и требования типа контента Django

class Tender(models.Model): 
    title = models.CharField(max_length=256) 
    description = models.TextField() 
    department = models.CharField(max_length=50) 
    tags = models.ManyToManyField(Tag) 
    pub_date = models.DateTimeField(default=timezone.now) 

class Job(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    title = models.CharField(max_length=256) 
    qualification = models.CharField(max_length=256) 
    employer = models.CharField(max_length=50) 
    salary = models.IntegerField()  
    tags = models.ManyToManyField(Tag) 
    pub_date = models.DateTimeField(default=timezone.now) 

class News(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    title = models.CharField(max_length=150) 
    body = models.TextField() 
    tags = models.ManyToManyField(Tag) 
    pub_date = models.DateTimeField(default=timezone.now) 

Теперь я хотел бы сделать другую модель (класс Post), так что всякий раз, когда создается новый объект (работы или тендера или новостей), новый пост объект должен быть создан, в основном это будет сделано с помощью сигналы.

Теперь этот пост класса

  1. Я хотел бы, чтобы отфильтровать с помощью пользователя, который создал работу/тендер/объект новости.
  2. Также фильтруйте, используя теги, которые использовались в объекте job/tender/news.
  3. Заказ by pub_date.

Я очень новичок в содержании контента django и смущен, какие поля будут необходимы. Я точно знаю, что это три поля обязательны, content type, object id и content object.

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

Но чтобы получить функциональные возможности, которые я хочу (то есть фильтр и порядок по), я должен добавить user, tags и pub_date поле в Post классе?

ответ

0

От Django documentation:

Благодаря пути GenericForeignKey реализован, вы не можете использовать такие поля непосредственно с помощью фильтров (фильтр() и исключить(), например) с помощью базы данных API. Поскольку GenericForeignKey не является нормальным полем объекта, эти примеры не будут работать:

Я считаю, что короткий ответ вам нужно будет включать user, tags и pub_date или, возможно, лучше было бы ссылки на модели через Внешний ключ.

+0

Прошу прощения, я не получил ссылку на модели через ForeignKey. Не могли бы вы рассказать об этом. Спасибо. – Aamu

+0

Извините, это не умно. Я считаю, что у вас также есть модель под названием Tag из-за 'tags = models.ManyToManyField (Tag)', поэтому я просто предлагаю для пользователя и тегов, которые вы включили в Post 'user = models .ForeignKey (settings.AUTH_USER_MODEL) 'и' tags = models.ManyToManyField (Tag) '. Из интереса, почему вы не используете 'user = models.ForeignKey (User)'? – HenryM

 Смежные вопросы

  • Нет связанных вопросов^_^