我正在从不同网站获取产品的聚合器应用程序。每种产品都有一个与其相关的子类别,颜色和图案。 (例如长袖蓝色横条纹T恤。)这里的子类别是长袖T恤和颜色蓝色和图案条纹。我创建的模型这样Django模型关系
from __future__ import unicode_literals
from django.db import models
from smart_selects.db_fields import ChainedForeignKey,ChainedManyToManyField
# Create your models here.
class Category(models.Model):
title=models.CharField(max_length=255)
def __str__(self):
return self.title
class Product(models.Model):
title=models.CharField(max_length=255)
price=models.DecimalField(max_digits=10,decimal_places=4,null=True)
subcategory = models.ForeignKey('Subcategory',related_name='products',null=True,blank=True)
color = models.ForeignKey('Color',related_name='productcolor',null=True)
pattern = models.ForeignKey('Pattern',related_name='productpattern',null=True)
image= models.URLField(null=True,blank=True)
# outfit= models.ForeignKey('Outfit',related_name='looks',null=True)
def __str__(self):
return self.title
class Subcategory(models.Model):
title=models.CharField(max_length=255)
category = models.ForeignKey('Category',related_name='category',blank=True,null=True)
# product= models.ForeignKey('Product',related_name='Productinsub',null=True)
# outfit= models.ForeignKey('Outfit',related_name='outlook',null=True)
class Meta:
verbose_name_plural = "subcatagories"
def __str__(self):
return self.title
class Color(models.Model):
title=models.CharField(max_length=255)
subcategory = models.ManyToManyField('Subcategory',related_name='subcategory',null=True)
# pattern = models.ForeignKey('Pattern', blank=True, null=True, related_name='colors')
def __str__(self):
return self.title
class Pattern(models.Model):
title=models.CharField(max_length=255)
# color = models.ManyToManyField('Color',related_name='patterns',null=True)
#
def __str__(self):
return self.title
直到这每一件事情是罚款的问题是在前端侧栏我需要证明的颜色和图案下方下面的子类别。现在,当用户从侧边栏选择子类别(例如长袖T恤)时,在侧边栏中应该可以看到该特定子类别的所有可用颜色,并且同样适用于图案。那么如何从子类别中获取所有颜色,因为颜色与子类别没有直接关系?
编辑 我已经加了我完整的模型的建议我已经添加了关系,但是当我上传我的CSV它不映射多对多领域这里是如何将我的CSV从-import出口
class CategoryAdmin(admin.ModelAdmin):
pass
admin.site.register(Category,CategoryAdmin)
# class LookAdmin(admin.ModelAdmin):
# pass
#
#
# admin.site.register(Look,LookAdmin)
@admin.register(models.Subcategory)
class SubcategoryAdmin(bulk_admin.BulkModelAdmin):
search_fields = ('title',)
raw_id_fields = ('category',)
# admin.site.register(Subcategory,SubcategoryAdmin)
class ColorAdmin(admin.ModelAdmin):
pass
admin.site.register(Color,ColorAdmin)
class ProductWidget(widgets.ForeignKeyWidget):
def clean(self, value):
return self.model.objects.get_or_create(title= value)[0]
class ProductResource(resources.ModelResource):
category = fields.Field(column_name='category', attribute='category', widget=ProductWidget(Category, 'title'))
subcategory = fields.Field(column_name='subcategory', attribute='subcategory', widget=ProductWidget(Subcategory, 'title'))
color = fields.Field(column_name='color', attribute='color', widget=ProductWidget(Color, 'title'))
pattern = fields.Field(column_name='pattern', attribute='pattern', widget=ProductWidget(Pattern, 'title'))
class Meta:
model = Product
class ProductAdmin(ImportExportModelAdmin,bulk_admin.BulkModelAdmin):
resource_class = ProductResource
list_filter = ('subcategory', admin.RelatedOnlyFieldListFilter),('color', admin.RelatedOnlyFieldListFilter),('pattern', admin.RelatedOnlyFieldListFilter)
list_select_related = ('subcategory','color','pattern')
# raw_id_fields = ('outfit',)
# bulk_inline = (ProductInline,)
# inlines = (OutfitInline,)
admin.site.register(Product,ProductAdmin)
Django的地图
我的CSV文件看起来像这样
title price category subcategory color id
Stripe Top 899 Top Dress red
Fringe Shoulder Midi Dress 3495 Top Dress red
Button Through Skater Dress 1595 Top Dress red
如果您向我们展示模型会更容易。 –
@JoseRomeroi已添加模型 –