Как присоединиться к таблице, если строковое поле не равно нулю - PullRequest
0 голосов
/ 05 декабря 2018

Я должен показать все статьи из закона.Кроме того, каждая статья может иметь описание или нет.Я должен показать все статьи и ваше описание, но я не знаю, как объединить описания и статью, когда highlight description не равно нулю.

my view:

def details(request, pk):
 law = get_object_or_404(Law, pk=pk)    
 articles = Article.objects.filter(law=pk)
 articles = (
 Article
 .objects
 .filter(law=pk)
 .annotate(
     is_marked=Exists(
         Highlight
         .objects
         .filter(
             article_id=OuterRef('id'),
             user=request.user
         )
        )
     )
 )   
context = {
    'articles': articles,    
}
template_name = 'leis/details.html'
return render(request, template_name, context)

Мой detail.html:

<div class="article-post"> 
   {% for article in articles %}   
      {{article}}
   {% endfor %}
</div>

Это мой model:

class Law(models.Model):
    name  = models.CharField('Name', max_length=100)
    description = models.TextField('Description', blank = True, null=True)

class Article(models.Model):
    article = models.TextField('Artigo/Inciso')
    number = models.IntegerField('Number', blank=True, null=True)
    law = models.ForeignKey(Law, on_delete=models.CASCADE, verbose_name='Law', related_name='articles')

Этот класс сохраняется с описанием, сделанным конкретным пользователем в конкретной статье в определенном законе:

class Highlight(models.Model):
    law = models.ForeignKey(Law, on_delete=models.CASCADE, verbose_name='Law', related_name='highlightArticles')
    article = models.ForeignKey(Law, on_delete=models.CASCADE, verbose_name='Article', related_name='highlightLaw')
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name='highlightUsers', related_name='highlightUsers')
    is_marked = models.BooleanField('Is it marked?', blank=True, default=False)
    description = models.TextField('Description', blank = True, null=True)

Как мне объединить таблицы, чтобы показать все статьи с вашим конкретным описанием, сделанным конкретным пользователем?

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете попробовать:

Article.objects.filter(law=pk, highlight__description__isnull=False).annotate(description=(F('highlight__description')))

он вернет всю Статью с highlight description не равным нулю, и может отображать description в вашем представлении с {{article.description}}

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