Django Tabular Inline не имеет проблемы с внешними ключами
В 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'.
Вы неправильно выбрали отношение OneToMany. У Image должен быть ForeignKey к Product. Таким образом, у продукта может быть несколько изображений.
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)