Администратор сайта не работает и выдает ошибку об одном из представлений, но представления все еще работают django - PullRequest
0 голосов
/ 22 февраля 2020

Это ошибка, которую он выдает плз проверки

Я пытаюсь получить сообщения, связанные с определенным тегом, и я сделал это, но когда я получаю доступ к панели администратора, это показывая в представлении posts_tag, я не могу отладить, почему это связано с административной панелью

    class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User,on_delete=models.CASCADE)
    tags = models.ManyToManyField('Tag',through='Tagged')
    class Meta:
        ordering=['-date_posted']
    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail',kwargs={'pk':self.pk})
`class Tag(models.Model):
    name=models.CharField(max_length=50)
    posts = models.ManyToManyField('Post',through='Tagged')

    def __str__(self):
        return self.name
class Tagged(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    tag = models.ForeignKey(Tag,on_delete=models.CASCADE)

urls.py

urlpatterns=[
path('',views.post_list,name='blog-home'),
path('<tag>/',views.post_tag,name='blog-tag'),
path('post/<int:pk>/',views.post_detail,name='post-detail'),
path('post/new/',views.post_create,name='post-create'),
path('post/<int:pk>/update/',views.post_update,name='post-update'),
path('post/<int:pk>/delete/',views.post_delete,name='post-delete'),
path('about/',views.about,name='blog-about')]

views.py

def post_tag(request,tag):
    t=Tag.objects.get(name=tag).posts.all()
    tags = Tagged.objects.all()
    return render(request,'blog/home.html',context={'posts':posts,'tags':tags})`

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

На самом деле вы пытаетесь использовать admin url, но вы не предоставляете admin url в своем urls.py

Если вы хотите использовать admin url, то вы должны предоставить admin url в своем urls.py как показано ниже ...

path('admin/', admin.site.urls)

В вашем случае вы фактически не указали URL-адрес администратора, но все же пытаетесь localhost:8000/admin/ Итак, он будет вызывать URL-адрес ниже вашего urls.py

path('<tag>/',views.post_tag,name='blog-tag')

Потому что, согласно вашей логике c, если вы предоставляете какое-либо слово после localhost:8000, оно будет восприниматься как <tag> и вызывать views.post_tag и согласно вашей логике c в post_tag view вы получите admin как tag имя и найдете его в Tag model, но в вашей модели тегов не было никакого тега с именем admin, поэтому он выдает ошибку вроде ... Tag matching query is does not exist

0 голосов
/ 22 февраля 2020

В вашем файле settings.py убедитесь, что ROOT_URLCONF указывает на ваш основной файл urlpatterns (файл urls.py), и добавьте строку path('admin/', admin.site.urls) к шаблонам.

urlpatterns=[
    # This line should point correctly to the admin site (/admin)
    path('admin/', admin.site.urls),

    path('',views.post_list,name='blog-home'),
    path('<tag>/',views.post_tag,name='blog-tag'),
    path('post/<int:pk>/',views.post_detail,name='post-detail'),
    path('post/new/',views.post_create,name='post-create'),
    path('post/<int:pk>/update/',views.post_update,name='post-update'),
    path('post/<int:pk>/delete/',views.post_delete,name='post-delete'),
    path('about/',views.about,name='blog-about')]

Потому что , Django не реализует сайт администратора по умолчанию, и если вы не реализуете шаблон URL, сайт администратора не будет найден, и вы получите такую ​​ошибку.

...