我是Django的新手,我正在try 通过车辆详细信息html页面中为每辆车制作的所有帖子.

我的车辆/模型.py:

*vehicles/models.py*

class Vehicle(models.Model):

     
    TESLA = 'TESLA'
    MAZDA = 'MAZDA'
    VOLVO = 'VOLVO'
    VEHICLE_CHOICES = (
        (TESLA, "Tesla"),
        (MAZDA, "Mazda"),
        (VOLVO, "Volvo"),
        )

    owner =  models.ForeignKey(User, on_delete=models.CASCADE) 
    
    model = models.CharField(max_length=9,
       
                    choices=VEHICLE_CHOICES,
                    default=TESLA)

    def __str__(self):
            return self.model

    class Meta:
        db_table = "vehicles"

我的帖子是模特.py:

*blog/models.py*

from django.db import models
from django.contrib.auth.models import User


     
class Post(models.Model):
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    vehicle =  models.ForeignKey(Vehicle, on_delete=models.CASCADE, default=None )
    
    def get_absolute_url(self):

        return reverse('post-detail', kwargs ={'pk': self.pk} )
  
    class Meta:
        db_table = "chargehistory"

我已经在 for each 用户传递所有车辆的html文件,现在我想获得 for each 用户车辆制作的所有帖子.

*vehicles/views.py*

class UserVehicleListView(ListView):
    model = Vehicle
    template_name = 'vehicles/vehicles.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'vehicles'
    
    def get_queryset(self):
        return Vehicle.objects.filter(owner_id= self.request.user.id)

class UserVehicleDetailView(DetailView):
    model = Vehicle


*vehicles/urls.py*



urlpatterns = [
    path('vehicles', UserVehicleListView.as_view(), name='vehicle-list'),
    path('vehicles/<int:pk>',  UserVehicleDetailView.as_view() , name='vehicle-detail'),

]

urlpatterns += staticfiles_urlpatterns()


由于我在路径中传递车辆主键,是否有任何方法可以根据该键过滤帖子,并将其传递给vehicle_detail.html?我是否应该将其作为列表视图传递,路径与UserVehicleDetailView相同?如果有人能帮我,那就太好了,因为我有点困了.谢谢

推荐答案

您可以直接使用自己使用的DetailView[django doc].你的routeDetailView的URL.py是正确的.你必须通过它的pk从html部分.

意见.py

class UserVehicleDetailView(DetailView):
    model=Vehicle
    template_name="any_folder_name/any_file.html"
    context_object_name="single_vehicle"

Note:使用DetailView时不应运行循环,因为它是一个对象.

随便.html


{% if "single_vehicle" %}
    <p>{{single_vehicle.owner.username}}</p>
{% endif %}

在这里,你可以通过链接访问他的所有财产,你也可以将pk改为另一个名字,比如id,然后在你的UserVehicleDetailView中提到它为pk_url_kwarg="id",那么它也可以工作.

但首先,您需要通过pkListView循环,然后通过DetailView作为单个对象访问它.

在路径函数中,Note:总是在每条路由的末尾给出/.




以下是一个最小的可重复性示例:

Create是一个简单的项目,在这个项目中,制作一个名为home的应用程序,在settings.py中的INSTALLED_APPS中注册它.之后,请参见下面的示例:

模型.py

from django.db import models

class Subject(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return f"{self.name}"

    class Meta:
        ordering = ['name']

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=200)
    father_name = models.CharField(max_length=200)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.name}"

网址.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.AllStudentDetailView.as_view(), name='all_student_detail'),
    path('single_student/<int:id>/',
         views.SingleStudentView.as_view(), name='student_detail')
]

意见.py

from msilib.schema import ListView
from django.shortcuts import render
from django.views.generic import DetailView, ListView
from .models import Student


class AllStudentDetailView(ListView):
    model = Student
    template_name = 'home/列出你的学生名单.html'
    context_object_name = 'all_students'


class SingleStudentView(DetailView):
    model = Student
    template_name = 'home/单身学生.html'
    context_object_name = 'student'
    pk_url_kwarg = 'id'

Note:DetailView中也有pk_url_kwarg的用法,当我们给出pk以外的东西时,也会用到pk_url_kwarg.

管理py

from django.contrib import admin
from .models import Student, Subject


@admin.register(Subject)
class SubjectAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']


@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'email', 'father_name', 'subject']

列出你的学生名单.html

<body>
    <h2>All Student Details</h2>
    <table border='1' style='text-align:center;' cellpadding='3px' cellspacing='3px'>
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Father Name</th>
                
            </tr>
        </thead>
        <tbody>
            {% for student in all_students  %}
            <tr>
                <td><a href="{% url 'student_detail' student.id %}">{{student.name}}</a></td>
                <td>{{student.email}}</td>
                <td>{{student.father_name}}</td>

            </tr>
            {% endfor %}
        </tbody>

    </table>
</body>

单身学生.html

<body>
    {% if student %}
    <h2>Detail of {{student.name}}</h2>
    <h3>All subject he/she had taken are:</h3>

    <p>Subject is -- {{student.subject}}</p>

    {% else %}
    <p>Student object does not come.</p>
    {% endif %}
</body>

当你点击单个学生的名字时,你会被重定向到详细信息页面上查看其详细信息.

Django相关问答推荐

Django:无法分配必须是实例(&Q;X),不想获取对象(&Q;)

设置wagail开发环境时出现ImportError:";无法从';wagta.search;";导入名称.

如何在Django REST框架中管理序列化程序?

如何在Django中显示多个相关对象

dj_rest_auth 中的 PyTest 警告- RemovedInDjango40Warning: django.conf.urls.url() 已弃用,取而代之的是 django.urls.re_path()

django 的 Manager.create() 方法有什么作用?

恢复 Django 1.7 RemoveField 迁移

JSP模板继承

删除所有实例后,Django 模型实例主键不会重置为 1

在 django 中获取本地时区

Django:获取上次用户访问日期

Django post_save 在不覆盖模型 save() 的情况下防止递归

Python - 覆盖 __init__ 的最干净方法,其中在 super() 调用之后必须使用可选的 kwarg?

过滤 Django 数据库中包含数组中任何值的字段

Django 1.7 - 如何 suppress (1_6.W001)某些元素单元测试可能无法按预期执行.?

在 django admin 中控制 TextArea 小部件的大小

只使用 Django 的某些部分?

django-getlist()

Django - TypeError - save() 得到了一个意外的关键字参数force_insert

Django中'related_name'和'related_query_name'属性之间的区别?