pyython, django

176
25 ноября 2021, 07:30

есть три модели каждая зависит от следующей. подскажите как выводить данные последовательно на 1 странице данные с country при переходе по ссылке названия должны быть данные с article далее аналогично с comment.

class Country(models.Model):
country_name = models.CharField('название страны', max_length=200)
def __str__(self):
    return self.country_name

class Article(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE)
article_title = models.CharField('название статьи', max_length=200)
article_text = models.TextField('текст статьи')
article_fulltext = models.TextField('текст статьи')
article_price = models.TextField('цена')
pub_date = models.DateTimeField('дата публикации')
article_image1 = models.ImageField(null=True, blank=True, 
upload_to="media/", verbose_name='Изображение')
def __str__(self):
    return self.article_title
def was_published_recently(self):
    return self.pub_date >= (timezone.now() - datetime.timedelta(days=7))
class Meta:
    verbose_name = 'Статья'
    verbose_name_plural = 'Статьи'
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
author_name = models.CharField('имя автора', max_length=50)
comment_text = models.CharField('текст комментария', max_length=200)
def __str__(self):
    return self.author_name
class Meta:
    verbose_name = 'Комментарий'
    verbose_name_plural = 'Комментарии'

проблем с выводом с country и article нет. а вот дальше застрял

def countrys(request):
countrys_list = Country.objects.all()
paginator = Paginator(countrys_list, 2)
page = request.GET.get('page')
countrys_list = paginator.get_page(page)
return render(request, 'articles/countrys.html', {'countrys_list': 
countrys_list})

def hostels(request, article_id):
try:
    a = Country.objects.get(id=article_id)
except:
    raise Http404("СТАТЬЯ НЕ НАЙДЕНА")
hostels_list = a.article_set.order_by('-id')[:10]
return render(request, 'articles/hostels.html', {'article': a, 
'hostels_list': hostels_list})

def detail(request, article_id1):
try:
    a = Article.objects.get(id=article_id1)
except:
    raise Http404("СТАТЬЯ НЕ НАЙДЕНА")
latest_comments_list = a.comment_set.order_by('-id')[:10]
return render(request, 'articles/detail.html', {'article': a, 
'latest_comments_list': latest_comments_list})

def leave_comment(request, article_id1):
try:
    a = Article.objects.get(id=article_id1)
except:
    raise Http404("СТАТЬЯ НЕ НАЙДЕНА")
a.comment_set.create(author_name=request.POST['name'], 
comment_text=request.POST['text'])
return HttpResponseRedirect(reverse('articles:detail', args=(a.id,)))

Это описанные вьюшки urls

 path('countrys/', views.countrys, name='countrys'),
 path('countrys/<int:article_id>/', views.hostels, name='hostels'),
 path('countrys/<int:article_id>/<int:article_id1>', views.detail, 
 name='hostels'),

вывод на страницу

      {% for a in countrys_list %} 
<ul class="menu"><li><a href="{% url 'articles:hostels' a.id %}">  
{{a.country_name}}</a></li></ul> 
      {% endfor %}

А со вторым выводом проблемы

      {%for c in hostels_list%} 
<ul class="menu"><li><a href="article:detail">{{c.article_text}}</a></li>  
</ul> 
      {% endfor %}

Может кто помочь разобраться

Answer 1

Насколько я понимаю, вы хотите в hostels вывести одну страну и список всех отелей (в виде списка статей), которые в ней находятся. Если это так, вам нужно передавать во вью в параметрах pk (или id) этой страны, а не статьи:

def hostels(request, country_id):
    try:
        a = Country.objects.get(id=country_id)
    except:
        raise Http404("СТАТЬЯ НЕ НАЙДЕНА")
    hostels_list = a.article_set.order_by('-id')[:10]
    return render(request, 'articles/hostels.html', {'country': a, 
    'hostels_list': hostels_list})

Таким образом у вас в шаблоне вывод должен выглядеть так:

  <h1>{{country.country_name}}</h1>
      <ul class="menu">
          {%for a in hostels_list%}
              <li>
                 <a href= "{% url hostels country.id c.id %}">{{a.article_title}}</a>
              </li> 
          {% endfor %}
      </ul>

(код привел без оптимизаций)

READ ALSO
Почему бизнес-логика имеет название &quot;бизнес&quot;?

Почему бизнес-логика имеет название "бизнес"?

Почему бизнес-логика имеет название "бизнес"?

101
Как расположить надпись по координатам X и Y

Как расположить надпись по координатам X и Y

Вопрос в том что я не понял как работает расположение по координатам X и Y Объясните пожалуйста То что счёт идёт от ЛВ угла экрана я знаю и то что...

175
Построение Line Chart в JavaFX из текстового файла

Построение Line Chart в JavaFX из текстового файла

Программа состоит из двух оконВ первом окне вводится путь текстового файла, из которого считываются данные (а именно, координаты Х и У точек)...

202
Время работы алгоритма

Время работы алгоритма

возникла небольшая проблемаНаписал программу, которая ищет 2 ближайшие точки 2-мя методами: декомпозиции и полным перебором

252