python - 进行迁移后,Django 新属性未显示在管理仪表板中
问题描述
只是一些背景:我最近从我的开发人员那里接管了我的实时网站,我有一些基本的编码知识,但我不是很精通。
我尝试向 Product 模型添加“purchase_type”属性,但即使在进行迁移后,新属性也没有显示在管理仪表板中。但是,当我查询数据库时,该属性就在那里并返回正确的值。
1. 在 models.py 中添加了“purchase_type”:
class Product(models.Model):
index_number = models.IntegerField(default=None, blank=True, null=True)
name = models.CharField(max_length=500, blank=True, null=True)
coming_soon = models.BooleanField(default=False)
retail_price = models.DecimalField(max_digits=100, decimal_places=2, default=None, null=True)
calories = models.IntegerField(default=None, blank=True, null=True)
protein_class = models.CharField(max_length=500, blank=True, null=True)
carb_class = models.CharField(max_length=500, blank=True, null=True)
fat_class = models.CharField(max_length=500, blank=True, null=True)
purchase_type = models.CharField(max_length=500, default="Subscription")
2. 在 admin.py 的字段集中添加了“purchase_type”:
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "index_number", "coming_soon", "retail_price", "calories", "protein_class", "carb_class", "fat_class")
search_fields = ("name",)
list_filter = ("protein_class", "carb_class", "fat_class")
ordering = ("index_number",)
fieldsets = (
("Main Info", {
"fields": ("index_number", "name", "coming_soon", "retail_price", "calories", "protein_class", "carb_class", "fat_class", "purchase_type"),
}),
3. 按运行顺序运行以下命令:
./manage.py migrate
./manage.py makemigrations webapp
./manage.py migrate
4.当我在数据库中查询purchase_type时,返回了正确的值:
./manage.py shell
from webapp.models import Product
>>> print(Product.objects.values('purchase_type'))
[{'purchase_type': u'Subscription'}, {'purchase_type': u'Subscription'}, {'purchase_type': u'Subscription'}, {'purchase_type': u'Subscription'}]
5. 但是,管理仪表板没有属性或值:
6. 这里是settings.py中的数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'lpdb', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': '[redacted]',
'PASSWORD': '[redacted]',
'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
非常感谢您的帮助,祝您有美好的一天!
编辑:这是完整的 admin.py 文件
from webapp.models import Subscription, Product, MailingListSignup
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from import_export import resources
from import_export.admin import ExportMixin
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "index_number", "coming_soon", "retail_price", "calories", "protein_class", "carb_class", "fat_class")
search_fields = ("name",)
list_filter = ("protein_class", "carb_class", "fat_class")
ordering = ("index_number",)
fieldsets = (
("Main Info", {
"fields": ("index_number", "name", "coming_soon", "retail_price", "calories", "protein_class", "carb_class", "fat_class", "purchase_type"),
}),
("Macronutrients", {
"fields": ("protein_amount", "protein_units", "net_carbohydrates_amount", "net_carbohydrates_units", "sugars_amount", "sugars_units", "dietary_fiber_amount", "dietary_fiber_units", "fats_amount", "fats_units", "saturated_fats_amount", "saturated_fats_units", "monounsaturated_fats_amount", "monounsaturated_fats_units", "polyunsaturated_fats_amount", "polyunsaturated_fats_units"),
}),
("MVitamins & Minerals", {
"fields": ("sodium_amount", "sodium_units", "sodium_percentage_dv", "potassium_amount", "potassium_units", "potassium_percentage_dv", "calcium_amount", "calcium_units", "calcium_percentage_dv", "iron_amount", "iron_units", "iron_percentage_dv", "iodine_amount", "iodine_units", "iodine_percentage_dv", "zinc_amount", "zinc_units", "zinc_percentage_dv", "selenium_amount", "selenium_units", "selenium_percentage_dv", "magnesium_amount", "magnesium_units", "magnesium_percentage_dv", "vitamin_a_amount", "vitamin_a_units", "vitamin_a_percentage_dv", "vitamin_c_amount", "vitamin_c_units", "vitamin_c_percentage_dv", "vitamin_d_amount", "vitamin_d_units", "vitamin_d_percentage_dv", "vitamin_e_amount", "vitamin_e_units", "vitamin_e_percentage_dv", "vitamin_k_amount", "vitamin_k_units", "vitamin_k_percentage_dv", "b2_riboflavin_amount", "b2_riboflavin_units", "b2_riboflavin_percentage_dv", "niacin_amount", "niacin_units", "niacin_percentage_dv", "b1_thiamine_amount", "b1_thiamine_units", "b1_thiamine_percentage_dv", "vitamin_b6_amount", "vitamin_b6_units", "vitamin_b6_percentage_dv", "vitamin_b12_amount", "vitamin_b12_units", "vitamin_b12_percentage_dv", "folates_amount", "folates_units", "folates_percentage_dv", "pantothenic_acid_amount", "pantothenic_acid_units", "pantothenic_acid_percentage_dv", "biotin_amount", "biotin_units", "biotin_percentage_dv"),
}),
)
save_as = True
class SubscriptionAdmin(admin.ModelAdmin):
list_display = ("user", "user_phone_number", "stripe_customer_id", "stripe_subscription_id", "stripe_successful", "paid_amount", "shipped", "datetime_ordered", "stripe_email", "shipping_name", "shipping_address_country", "shipping_address_zip", "shipping_address_state", "shipping_address_line1", "shipping_address_city", "shipping_address_country_code", "monthly_qty", "calories", "protein", "carb", "fats")
search_fields = ("user", "datetime_ordered")
list_filter = ("user", "datetime_ordered")
ordering = ("datetime_ordered",)
class UserAdmin(UserAdmin):
list_display = ('username', 'email', 'is_staff', 'date_joined', 'last_login')
ordering = ('-date_joined',)
list_filter = ('date_joined', 'last_login')
class MailingListSignupAdmin(ExportMixin, admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name', 'email')
admin.site.register(Subscription, SubscriptionAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
admin.site.register(Product, ProductAdmin)
admin.site.register(MailingListSignup, MailingListSignupAdmin)
解决方案
你尝试几件事:
首先,您必须在迁移文件夹中查找以检查是否Purchase_type
已包含在迁移文件中。
如果是,则运行此命令,这将撤消所有迁移:
python manage.py migrate webapp zero
要重做迁移,请运行以下 2 个命令以进行迁移,然后迁移并检查它是否解决了您的问题。
如果NO,则从 ** App
** 中删除所有迁移文件并重新运行:
删除所有前面有数字的文件
App
> Migrations > 0000_files.py
python manage.py makemigrations webapp
python manage.py migrate
如果这不能解决您的问题,请删除您的dbsqlite3
文件并再次进行迁移。这总是有帮助的,但您将运行所有迁移、超级用户创建等。
更新
运行此命令:
python manage.py syncdb
此命令会将模型文件中的更改实施到 PostgresSql 数据库。
推荐阅读
- php - 如何从 laravel 中的 json 数组中获取数据
- python - 无法在 python 2.7 上安装 pyqt5
- malware - 恶意软件二进制文件可以打包吗?
- linux - 是否有适用于 linux 和 mac OS 的命令来确定操作系统版本?
- reactjs - 如何遍历数组并将每 3 个项目添加到新的 Div
- html - 如何使用类在超链接中设置 svg 样式?
- amazon-web-services - 将 S3 用作内部应用程序负载均衡器 (ALB) 应用程序的 CDN 的可能性
- python-2.7 - 是否可以在不是可腌制对象的类的实例方法(甚至是类方法)中使用 apply_async?
- python - 在 django 中控制查看和模板输出的请求
- nginx - 我们可以比 NginX/Apache 更快地从 Tomcat 提供静态文件吗?