2016-12-19 5 views
0

У меня есть приложение в Django 1.8, и я хочу взять последний объект (на основе pub_date) и установить для этого объекта, зарегистрированного is_mainteaser, на True, и rest ssould установить на False.Возьмите последний объект в запросе и задайте значение в поле

Вот мой код, но последний объект не имеет поля True.

class ArticleListView(ListView): 
    model = Article 
    queryset = Article.objects.order_by('-pub_date') 

    def get_context_data(self, **kwargs): 
     context = super(ArticleListView, self).get_context_data(**kwargs) 
     lates_object = Article.objects.latest('pub_date') 
     lates_object.is_mainteaser = True 
     return context 

Вот моя модель:

class Article(model.Models): 
    title = models.CharField(max_length=255) 
    short_text = models.TextField(max_length=10000, default='') 
    image = FilerImageField(null=True) 
    pub_date = models.DateTimeField('date published') 
    online_from = models.DateTimeField('online from', blank=True) 
    online_to = models.DateTimeField('online to', blank=True) 
    position = models.PositiveIntegerField(default=0) 
    is_mainteaser = models.BooleanField(default=False) 

    def __str__(self): 
     return self.title 

    class Meta: 
     ordering = ['position'] 
+0

Вы никогда его не сохраняете ... но тогда почему вы делаете это в 'get_context_data'? – Sayse

+0

@ Sayse это должно быть в другом методе? –

+0

Ну, я не понимаю, что вы его настраиваете, поэтому я не могу сказать вам, похоже, что это было бы расточительно, хотя, поскольку это будет сохраняться каждый раз, когда кто-то посещает вид списка – Sayse

ответ

0

Если у вас есть экземпляр объекта и изменить модель атрибута необходимо сохранить экземпляр. Пример:

lates_object = Article.objects.latest('pub_date') 
lates_object.is_mainteaser = True 
lates_object.save() 

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