【问题标题】:how to display information entered by a user into a django model in the User profile如何在用户配置文件中显示用户输入到 django 模型中的信息
【发布时间】:2018-03-11 21:13:00
【问题描述】:

我是 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>

【问题讨论】:

  • 没有解决办法是什么?您发布的代码有什么问题?

标签: python django web


【解决方案1】:

快速浏览一下您的代码,您的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]

【讨论】:

  • 是的.. 这实际上是我的一个错误,我已经纠正了它,但仍然没有在个人资料页面上显示用户的列表
  • @Gabbywells 你是对的。我使用您的代码创建了一个 Django 应用程序以进一步调查该问题,并且我还在您的自定义模板的链接中发现了一个问题。我最近编辑了回复以解决该问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多