如何从数据库中获取与 ID 对象相关的信息

How to get related to ID objects from database

我正在创建一个我正在使用 Django 的网站 database.The 数据库将有一个称为类别的定义和一个称为 gifi.So 的 gif 将属于一个类别,当一个类别将被点击时会将用户发送到一个页面,该页面将显示属于该类别的所有 gif up.I 知道我应该做一些事情,比如请求 ID,但我不知道代码

这是型号:

from django.db import models

class categorite(models.Model):
    name = models.CharField(max_length=100)
    id = models.AutoField(primary_key=True)

class Gifi(models.Model):
    foto = models.ImageField(upload_to='website/static/')
    emri = models.CharField(max_length=100)
    Source = models.CharField(max_length=100)
    Kodet = models.CharField(max_length=12)
    categoryId = models.ForeignKey(categorite, on_delete=models.CASCADE)
    id = models.AutoField(primary_key=True)

这是浏览量:

 from django.shortcuts import render,get_object_or_404
from .models import  Gifi,categorite
# Create your views here.
def home(request):
    return render(request, 'website/home.html')

def categories(request):
    content = {
        'view': categorite.objects.all()
    }
    return render(request, 'website/categories.html',content)

def PostaCode(request):
    return render(request, 'website/PostaCode.html')

def Contact(request):
    return render(request, 'website/Contact.html')
def category(request,id):
    content = {
        'view':  categorite.objects.get(id=id)
    }
    return render(request, 'website/category.html',content)

这是网址:

from django.urls import path
from . import views
urlpatterns = [
    path('Home/',views.home, name='home'),
    path('Categories/', views.categories, name='categories'),
    path('PostaCode/', views.PostaCode, name='PostaCode'),
    path('Contact/', views.Contact, name='Contact'),
    path('Category/<int:id>/', views.category, name='category'),

    ]

这是我用来在 categories.html 上显示类别的代码:

<div class="row p">
    {%for categorite in view%}
    <a class="c" href="{% url 'category' categorite.id %}">{{categorite.name}}</a>
    {% endfor %}
  </div>

此视频快速展示了网站现在的运作方式: https://vimeo.com/user122082575/review/451987151/da98e3f75c

您可以像这样使用 filter 获取数据:

# view
def category(request,id):
    content = {
        'view':  Gifi.objects.filter(categoryId_id=id)
    }
    return render(request, 'website/category.html',content)

# template
<div class="row p">
{% for gifi in view %}
   {{ gifi.emri }}
{% endfor %}
</div>

或者,您可以使用相关对象获取数据(在GifiCategory之间使用reverse relation):

# view
def category(request,id):
    content = {
        'view':  Category.objects.get(id=id)
    }
    return render(request, 'website/category.html',content)

# template
<div class="row p">
{{ view.name }}  // category name
{% for gifi in view.gifi_set.all %}
   {{ gifi.emri }} // gifi information
{% endfor %}
</div>

根据您的观点,当您请求 Gifi 时,您应该使用您从 url 提供的 <int:id>。所以在你的观点中它会是这样的:Gifi.objects.filter(categoryId_id=id) 然后你可以在你的上下文中传递它。

需要修正的备注:

  • categorite 是小写它应该 Categorite 也总是用英文命名。
  • Source, Kodet 应该是小写字母,遵循 python 约定。
  • id 已过时,因为您始终有 pk 并且 django 知道在过滤结果时何时将 id 转换为 pk
  • categoryId 应该只是 category
  • 视图函数应该总是蛇形的。例如 PostaCode -> posta_code
  • 修复函数之间的间距,类
  • urls 应该小写。

与您的代码保持一致是强制性的,始终遵循每种语言的约定。对于 python 那将是 pep8 or black 请确保你知道这两个。