Django 错误:未找到与查询匹配的属性

问题描述 投票:0回答:1

所以我正在使用 Django 构建一个网站,其中

Property
有一个
agent
列出它,在
AgentDetailView
中我正在渲染所有代理的信息,但我也想在同一页面中渲染代理列出的属性。所以我尝试了
Property.objects.filter
方法但没有成功。

如何让我的代码正常工作?预先感谢!

我的模型.py:

class Property(models.Model):
    price = models.IntegerField()
    address = models.CharField(max_length = 10000)
    state = models.CharField(max_length = 1000)
    country = models.CharField(max_length = 1000)
    description =  models.TextField()
    image1 = models.ImageField(upload_to = 'Images/')
    image2 = models.ImageField(upload_to = 'Images/')
    image3 = models.ImageField(upload_to = 'Images/')
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE)
    agent_description = models.TextField()
    is_featured = models.BooleanField(default = False)
    bedrooms = models.IntegerField()
    bathrooms = models.IntegerField()
    date_posted = models.DateTimeField(default=timezone.now)
    slug = models.SlugField(default='')

class Agent(models.Model):
    name = models.CharField(max_length=100)
    password = models.CharField(max_length=100)
    image = models.ImageField(upload_to = 'Images/')
    bio = models.TextField()
    instagram = models.URLField(max_length=100)
    twitter = models.URLField(max_length=100)
    facebook = models.URLField(max_length=100)
    linkedin = models.URLField(max_length=100)
    is_featured = models.BooleanField(default = False)
    slug = models.SlugField(default='')

我的观点.py:

class AgentDetailView(DetailView):
    model = Agent
    template_name = 'blog/agent_detail.html'
    slug_field = 'slug'

    def get_queryset(self):
        return Property.objects.filter(agent=self.kwargs.get('agent'))
django django-models django-views django-templates
1个回答
0
投票

我认为你的

get_queryset
方法有问题。
agent
模型中的
Property
字段是
Agent
模型的外键,因此您应该根据特定的代理实例而不是代理slug来过滤属性。

尝试:

from django.shortcuts import get_object_or_404

class AgentDetailView(DetailView):
    model = Agent
    template_name = 'blog/agent_detail.html'
    slug_field = 'slug'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        agent = self.get_object()
        properties = Property.objects.filter(agent=agent)
        context['properties'] = properties
        return context

get_context_data
方法用于向模板添加额外的上下文数据。它使用
self.get_object()
检索特定代理实例,然后根据该代理过滤属性。

现在,在您的

agent_detail.html
模板中,您可以使用
{{ agent.field_name }}
访问代理详细信息,并使用 for 循环访问属性,例如:

<!-- Display agent details -->
<h1>{{ agent.name }}</h1>
<p>{{ agent.bio }}</p>

<!-- Display properties listed by the agent -->
<h2>Listed Properties:</h2>
<ul>
  {% for property in properties %}
    <li>{{ property.address }} - {{ property.price }}</li>
  {% endfor %}
</ul>
© www.soinside.com 2019 - 2024. All rights reserved.