Python 如何从数据库中获取与ID对象的关联

Python 如何从数据库中获取与ID对象的关联,python,html,django,django-queryset,Python,Html,Django,Django Queryset,我正在创建一个使用django数据库的网站。该数据库将有一个名为categories的def和一个名为gifi的def。因此,gif将属于一个类别,当单击一个类别时,它会将用户发送到一个页面,其中将显示属于该类别的所有gif。我知道我应该执行类似于请求ID的操作,但我我不知道密码 以下是模型: from django.db import models class categorite(models.Model): name = models.CharField(max_length=1

我正在创建一个使用django数据库的网站。该数据库将有一个名为categories的def和一个名为gifi的def。因此,gif将属于一个类别,当单击一个类别时,它会将用户发送到一个页面,其中将显示属于该类别的所有gif。我知道我应该执行类似于请求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)
这是URL:

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'),

    ]
从django.url导入路径
从…起导入视图
URL模式=[
路径('Home/',views.Home,name='Home'),
路径('Categories/',views.Categories,name='Categories'),
路径('PostaCode/',views.PostaCode,name='PostaCode'),
路径('Contact/',views.Contact,name='Contact'),
路径('Category/',views.Category,name='Category'),
]
这是我用来在my categories.html上显示类别的代码:

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

{视图%中分类的百分比}
{%endfor%}
本视频快速展示了网站目前的运行情况:

您可以使用以下方法获取数据:

# 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>

在您的视图中,当您请求
Gifi
时,应使用您从url提供的
。所以在您的视图中是这样的:
Gifi.objects.filter(categoryId\u id=id)
然后您可以在上下文中传递它

您必须修复的备注:

  • categate
    是小写,它应该
    categate
    也应该是英文名称
  • Source,Kodet
    应该是小写,遵循python约定
  • id
    已过时,因为您总是有
    pk
    ,django知道在筛选结果时何时将
    id
    转换为
    pk
  • categoryId
    应该只是
    category
  • 视图函数应始终处于snake状态。例如
    PostaCode
    ->
    PostaCode
  • 确定函数、类之间的间距
  • URL应该是小写的

与您的代码保持一致是强制性的,请始终遵循每种语言的约定。对于python,这可能是或请确保您了解这两个方面。

“categoryId应该是category_id”,这不是100%正确的。如果从Django的角度考虑,它会自动创建一个名为
category\u id
的字段,如果您将该字段命名为
category
(您可以使用该字段进行查询或从数据库表中进行验证)。所以“categoryId应该是category”是的,这是完全正确的,我只是把它翻译成了snake case,没有想到这一点!
# 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>