我是django的新手,我目前正在开展一个项目。这是一个人们可以寻找房屋出租的网站。用户将能够创建帐户,搜索房屋租赁并创建有关他们想要出租的房屋的列表。
我创建了一个模型来保存用户想要出租房屋的所有信息。我需要过滤此信息并在其个人资料中显示每个用户的列表。我在网上搜索但还没有解决方案。
真的需要帮助。
models.py
from django.db import models
from django.contrib.auth.models import User
class Myhouses(models.Model):
Available = 'A'
Not_Available = 'NA'
Availability = (
(Available, 'Available'),
(Not_Available, 'Not_Available'),
)
name_of_accomodation = models.CharField(max_length=200)
type_of_room = models.CharField(max_length=200)
house_rent = models.IntegerField()
availability = models.CharField(max_length=2, choices=Availability, default=Available,)
location = models.CharField(max_length=200)
nearest_institution = models.CharField(max_length=200)
description = models.TextField(blank=True)
image = models.ImageField(upload_to='profile_image')
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='author')
def __str__(self):
return self.name_of_accomodation
view.py
class ListingByUser(LoginRequiredMixin, generic.ListView):
model = Myhouses
template_name ='houses/ListingByUser.html'
paginate_by = 10
def get_queryset(self):
return Myhouses.objects.filter(author=self.request.user)
urls.py
from django.conf.urls import url, include
from . import views
from django.contrib.auth.models import User
urlpatterns = [
url(r'^addlisting/$', views.addlisting, name='addlisting'),
url(r'^mylisting/', views.ListingByUser.as_view(), name='ListingByUser')
]
模板
<ul>
{% for houses in myhouses_list %}
<li>{{ houses.name_of_accomodation }}</li>
{%endfor %}
</ul>
答案 0 :(得分:2)
快速查看代码,有些东西让我陷入ListingByUser
视图:您只需覆盖get
方法来设置一些通常被定义为类属性的属性。这也可能阻止您的视图实际上将您的模型从数据库中取出(通过调用get_queryset
方法)并呈现正确的响应。
修改强>
我发现将模板与ListingByUser
视图呈现的响应相关联也存在问题。据我所知,Django视图没有查看变量template_name
来获取响应的模板。但它确实调用了一个方法get_template_names
,它返回一个以字符串形式给出的模板名称列表。
尝试以这种方式修改它:
<强> views.py 强>
class ListingByUser(LoginRequiredMixin, generic.ListView):
model = Myhouses
template_name ='myhouses/listing_by_user.html'
paginate_by = 10
def get_queryset(self):
return Myhouses.objects.filter(author=self.request.user)
def get_template_names(self):
return [self.template_name]