简体   繁体   English

访问 Django 模板中的父 model 属性

[英]Accessing a parent model attribute within Django template

I have an app that has a list of projects, and each project has a number of posts, and when you click on a project, it shows all of the posts in that project, but I can't figure out how to make it display what project the user is currently on, sample of it not working It should say "Posts for project 1" for example.我有一个包含项目列表的应用程序,每个项目都有许多帖子,当您单击一个项目时,它会显示该项目中的所有帖子,但我不知道如何让它显示用户当前在哪个项目上,它的示例不工作例如应该说“项目 1 的帖子”。 Here is the relevant code of what I have so far.这是我到目前为止所拥有的相关代码。

    <h1 class="mb-3">Posts for {{ post.project.title }}</h1>
    {% for post in posts %}
        <article class="media content-section">
            <img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">
            <div class="media-body">
                <div class="article-metadata">
                    <a class="mr-2">{{ post.author }}</a>
                    <small class="text-muted">{{ post.date_posted|date:"F d, Y" }}</small>
                </div>
                <h2><a class="article-title">{{ post.title }}</a></h2>
                <p class="article-content">{{ post.description }}</p>
            </div>
        </article>
    {% endfor %}
class Project(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(default='')
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('project-detail', kwargs = {'pk': self.pk})

    class Post(models.Model):

    def get_default_action_status():
        return Project.objects.get(title="bruh")
    project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='posts', default=get_sentinel_exam_id)
    title = models.CharField(max_length=100)
    description = models.TextField(default='')
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    LOW = '!'
    MED = '!!'
    HIGH = '!!!'
    
    YEAR_IN_SCHOOL_CHOICES = [
        (LOW, '!'),
        (MED, '!!'),
        (HIGH, '!!!'),
    ]
    severity = models.CharField(
        max_length=3,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=LOW,
    )

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs = {'pk': self.pk})
    urlpatterns = [
    path('', ProjectListView.as_view(), name='blog-home'),
    path('user/<str:username>', UserProjectListView.as_view(), name='user-projects'),
    path('project/<str:title>', ProjectPostListView.as_view(), name='project-posts'),
    path('post/<int:pk>/', ProjectDetailView.as_view(), name='project-detail'),
    path('post/new/', ProjectCreateView.as_view(), name='project-create'),
    
    path('post/<int:pk>/update/', ProjectUpdateView.as_view(), name='project-update'),
    path('post/<int:pk>/delete/', ProjectDeleteView.as_view(), name='project-delete'),
    path('about/', views.about, name='blog-about'),
    ]
class ProjectPostListView(ListView):
    model = Post
    template_name = 'blog/project_posts.html'
    context_object_name = 'posts'
    paginate_by = 10
    
    def get_queryset(self):
        project = get_object_or_404(Project, title=self.kwargs.get('title'))
        return Post.objects.filter(project=project).order_by('-date_posted')

Apologies if some of that code wasn't needed, I am new to Django.抱歉,如果不需要其中的某些代码,我是 Django 的新手。

I figured it out by making the model of "ProjectPostListView" into a Project, and then changing that to a DetailView so I could just use all of the post objects associated with that project.我通过将“ProjectPostListView”的 model 变成一个项目,然后将其更改为 DetailView 来解决这个问题,这样我就可以使用与该项目关联的所有帖子对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM