在 Django 中,我設定了兩種模型,一種用于產品,另一種用于影像。一個產品可以有多個與之關聯的影像,因此我使用的是一對多模型。
在我的 models.py 我有
from django.db import models
from django.db.models.fields import CharField
# Create your models here.
class Image(models.Model):
image = models.ImageField()
imageMetaKeyWords = models.CharField("Meta keywords for SEO", max_length = 255,
help_text = "Comma delimited words for SEO")
imageMetaDescription = models.CharField("Meta description", max_length = 255,
help_text = "Content for image meta tag description")
defaultImage = models.BooleanField(default= False)
class Product(models.Model):
productName = models.CharField(max_length=200)
productDescription = models.TextField(blank=True)
productPrice = models.DecimalField(max_digits=9, decimal_places=0, default=0)
productAvailable = models.BooleanField(default = True)
productCreated_at = models.DateTimeField(auto_now_add = True)
productUpdated_at = models.DateTimeField(auto_now = True)
productSlug = models.SlugField(max_length = 255, unique = True,
help_text = "Unique text for url created from product name")
productMetaKeywords = models.CharField("Meta keywords for SEO", max_length = 255,
help_text ="Comma delimited words for SEO")
productMetaDescription = models.CharField("Meta description", max_length = 255,
help_text="Content for meta tag description")
productImages = models.ForeignKey(Image, on_delete=models.CASCADE)
class Meta:
db_table = 'products'
ordering = ['-productName']
def __str__(self):
return self.productName
在 admin.py
from django.contrib import admin
from .models import Product, Image
from .forms import ProductAdminForm
# Register your models here.
class ImageTabularInline(admin.TabularInline):
model = Product
class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm
inlines = [ImageTabularInline,]
class Meta:
model = Product
admin.site.register(Product, ProductAdmin)
admin.site.register(Image)
在forms.py中我有
from django import forms
from .models import Product
class ProductAdminForm(forms.ModelForm):
class Meta:
model = Product
fields = "__all__"
當我運行時,python manage.py makemigrations我收到這個錯誤,我不知道它是什么意思
django.core.management.base.SystemCheckError: SystemCheckError: 系統檢查發現了一些問題:
ERRORS:
<class 'products.admin.ImageTabularInline'>: (admin.E202) 'products.Product' has no ForeignKey to 'products.Product'.
uj5u.com熱心網友回復:
你搞錯了 OneToMany 關系。影像應該有一個產品的外鍵。這樣一個產品可以有多個影像。
class Image(models.Model):
image = models.ImageField()
imageMetaKeyWords = models.CharField("Meta keywords for SEO", max_length = 255,
help_text = "Comma delimited words for SEO")
imageMetaDescription = models.CharField("Meta description", max_length = 255,
help_text = "Content for image meta tag description")
defaultImage = models.BooleanField(default= False)
product = models.ForeignKey("Product", on_delete=models.CASCADE, related_name="images")
#if you want to get the product's images you can call product.images
并洗掉這個:
productImages = models.ForeignKey(Image, on_delete=models.CASCADE)
進行遷移,然后在您的 admin.py 中:
from django.contrib import admin
from .models import Product, Image
from .forms import ProductAdminForm
# Register your models here.
class ImageTabularInline(admin.TabularInline):
model = Image
class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm
inlines = [ImageTabularInline,]
class Meta:
model = Product
admin.site.register(Image)
admin.site.register(Product, ProductAdmin)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334395.html
標籤:姜戈 django-models
下一篇:如何使用Django身份驗證
