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 同时丢失了数据(删除文件将重新创建它下次启动本地服务器时,数据将会丢失。
您可能想要开始使用您计划在生产中使用的数据库,以排除这些问题,并在开发时更接近您的生产设置。
我正在使用 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 同时丢失了数据(删除文件将重新创建它下次启动本地服务器时,数据将会丢失。
您可能想要开始使用您计划在生产中使用的数据库,以排除这些问题,并在开发时更接近您的生产设置。