【问题标题】:Why can't I see user-added information with Django?为什么我用 Django 看不到用户添加的信息?
【发布时间】:2019-08-05 15:04:49
【问题描述】:

我正在使用 Django 2.2 和 PostgreSQL。我想显示用户添加到详细信息页面的产品信息。我在“StoreOtherInfo”模型中看到了信息,但在“Product”模型中看不到信息。我该怎么做?

存储/models.py

class StoreOtherInfo(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE,blank=True, null=True)
    phone = models.CharField(max_length=11)
    fax = models.CharField(max_length=11)
    province = models.CharField(max_length=11)
    district = models.CharField(max_length=11)
    neighborhood = models.CharField(max_length=11)

    def __str__(self):
        return self.user.username

products/models.py

class Product(models.Model):
    seller = models.ForeignKey(User, on_delete = models.CASCADE)
    product_name = models.CharField(max_length = 50)
    description = RichTextField()
    added_date = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.seller

store/views.py

from store.models import StoreOtherInfo
from products.models import Product

def neighbor_detail(request,username):

    neighbor_detail = get_object_or_404(User,username = username)
    neighbor_list = StoreOtherInfo.objects.all()
    product_list = Product.objects.all()
    return render(request, 'store/neighbor_detail.html', {'neighbor_detail':neighbor_detail, 'neighbor_list':neighbor_list, 'product_list':product_list})

模板/neighbor_detail.html

      <strong><p>{{neighbor_detail.first_name}} {{neighbor_detail.last_name}}</p></strong>
      <p>{{neighbor_detail.username}}</p>
      <p>{{neighbor_detail.email}}</p>
      <p>{{neighbor_detail.storeotherinfo.phone}}</p>
      <p>{{neighbor_detail.storeotherinfo.fax}}</p>
      <p>{{neighbor_detail.storeotherinfo.province}}</p>
      <p>{{neighbor_detail.storeotherinfo.district}}</p>
      <p>{{neighbor_detail.storeotherinfo.neighborhood}}</p>
      <p>{{neighbor_detail.product.product_name}}</p>
      <p>{{neighbor_detail.product.description}}</p>
      <p>{{neighbor_detail.product.added_date}}</p>

【问题讨论】:

    标签: django model


    【解决方案1】:

    根据您的产品型号:

    seller = models.ForeignKey(User, on_delete = models.CASCADE)
    

    用户模型和产品模型之间的关系是一对多的。这意味着每个用户(在这种情况下是卖家)可以拥有多个产品。 因此,当您尝试像在模板中那样访问 User 对象的 Product 对象时:&lt;p&gt;{{neighbor_detail.product.product_name}}&lt;/p&gt; 您最终会给出归因错误,因为 neighbor_detail.product 不是 Product 类的单个对象,它是一个集合。 用这个替换你的模板代码,我希望你意识到发生了什么。

    <strong><p>{{neighbor_detail.first_name}} {{neighbor_detail.last_name}}</p></strong>
    <p>{{neighbor_detail.username}}</p>
    <p>{{neighbor_detail.email}}</p>
    <p>{{neighbor_detail.storeotherinfo.phone}}</p>
    <p>{{neighbor_detail.storeotherinfo.fax}}</p>
    <p>{{neighbor_detail.storeotherinfo.province}}</p>
    <p>{{neighbor_detail.storeotherinfo.district}}</p>
    <p>{{neighbor_detail.storeotherinfo.neighborhood}}</p>
    
    {% for product in neighbor_detail.product_set.all %}
      {{product.product_name}}<br/>
      {{product.description}}<br/>
      {{product.added_date}}<br/>
    {% endfor %}
    
    

    请注意,product_set 是 django 与每个用户相关的产品关联的默认名称。

    【讨论】:

      【解决方案2】:

      一个User 可以有多个Products,所以你不能做neighbor_detail.product,因为product 没有在User 上定义。您需要使用{% for product in neighbor_detail.product_set.all %} 遍历产品列表,然后您可以显示每个product 的属性。

      阅读 [this] 了解有关一对多关系的更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2021-11-13
        • 1970-01-01
        • 2017-03-07
        • 2020-12-07
        • 1970-01-01
        相关资源
        最近更新 更多