django 管理数据未在数据库中注册

django admin data does not register in database

我正在使用 Django 构建一个电子商务网站,并且在将数据从管理页面传输到数据库然后 html 时遇到了一些困难。我是 Django 的新手,希望得到您的帮助。 我通过 Django 管理页面添加了 7 个“产品”(class 产品)。

models.py

from django.db import models
from django.contrib.auth.models import User


class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.FloatField()
    
    def __str__(self):
        return self.name


class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, blank=True)
    date_ordered = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False)
    transaction_id = models.CharField(max_length=100, null=True)

    def __str__(self):
        return str(self.id)


class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
    quantity = models.IntegerField(default=0, null=True, blank=True)
    date_added = models.DateTimeField(auto_now_add=True)


class ShippingAddress(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
    address = models.CharField(max_length=200, null=False)
    city = models.CharField(max_length=100, null=False)
    country = models.CharField(max_length=100, null=False)
    postcode = models.CharField(max_length=100, null=False)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.address


views.py

from django.shortcuts import render
from .models import *


def products(request):
    products = Product.objects.all()
    context = {'products':products}
    return render(request, 'store/products.html')


def cart(request):
    context = {}
    return render(request, 'store/cart.html')


def checkout(request):
    context = {}
    return render(request, 'store/checkout.html')


def home(request):
    context = {}
    return render(request, 'store/home.html')


admin.py

from django.contrib import admin
from .models import *

admin.site.register(Customer)
admin.site.register(Product)
admin.site.register(Order)
admin.site.register(OrderItem)
admin.site.register(ShippingAddress)

在settings.py中,默认数据库是sqlite3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Screen shot of Django admin page with products successfully added

我已完成迁移,数据库 db.sqlite3 已退出到我的项目文件夹中。

但是,当我检查 table“store_product”的值时,它似乎是空的...

提示


SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
sqlite> .width
sqlite> .mode markdown
sqlite> select * from store_product
   ...>


在我要显示产品的 html 页面中,没有任何显示...变量产品为空:

products.html

        {% if products is defined %}
            value of variable: {{ products }}
        {% else %}
            variable is not defined
        {% endif %}

它什么都不显示...

非常感谢您的帮助。

您永远不会将上下文传递给您的视图。它应该是这样的:

def products(request):
    products = Product.objects.all()
    context = {'products':products}
    return render(request, 'store/products.html', context)

此外,{% if products is defined %} 没有任何意义。所以简单地渲染产品:

{% for product in products %}
    Product: {{ product.name }}
    Price: {{ product.price }}
{% empty %}
    No products to display!
{% endfor %}

您的模板代码看起来不对 - is defined 不是 python。

以下就足够了:

{% if products %}
<ul>
    {% for product in products %}
    <li>{{ product.name }}: {{ product.price }}
    {% endfor %}
</ul>
{% else %}
    No products.
{% endif %}

Django 管理器准确显示其连接的数据库中的内容,没有缓存。

如果您在 sqlite 客户端或其他视图中看不到数据,这让我怀疑您使用的不是同一个数据库,或者 sqlite 同时丢失了数据(删除文件将重新创建它下次启动本地服务器时,数据将会丢失。

您可能想要开始使用您计划在生产中使用的数据库,以排除这些问题,并在开发时更接近您的生产设置。