私はモデル (Category、Item、AttributeCategory、AttributeitemValue) を持っています。新しいアイテムを追加すると、アイテムに AttributeitemValueInline があり、次にアイテムのカテゴリを変更します。このアイテムにカテゴリが含まれるアイテムの可能な属性値を取得したいと考えています。
たとえば、カテゴリ「ラップトップとタブレット」には (RAM とディスクの種類)、カテゴリ「ベッドと椅子」には (幅と高さ) があり、新しいアイテムを追加してカテゴリを選択すると、インライン フォーム属性 (アイテムのこのインライン フォーム) が作成されます。カテゴリにリンクされている属性値のみを持ちます。アイテム ラップトップの入力名を追加し、カテゴリを選択します。インライン フォームはこの値をキャッチし、アイテムに追加するための RAM とディスク タイプの属性のみを持ちます。私の悪い英語でごめんなさい。
カテゴリから属性を動的に取得するにはどうすればよいですか? アイテムを作成するのはいつですか?
class AttributeItemValueInline(admin.TabularInline):
model = AttributeItemValue
class AttributeItemValueAdmin(admin.ModelAdmin):
pass
admin.site.register(AttributeItemValue, AttributeItemValueAdmin)
class ItemAdmin(admin.ModelAdmin):
inlines = [
AttributeItemValueInline,
]
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "category":
kwargs["queryset"] = Category.objects.filter(parent__isnull = False)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(Item, ItemAdmin)
models.py
class Category(models.Model):
name = models.CharField(max_length = 255)
slug = models.SlugField()
parent = models.ForeignKey('self',on_delete = models.PROTECT, blank=True, null=True)
def __str__(self):
return self.name
def __unicode__(self):
return self.name
class Item(models.Model):
name = models.CharField(max_length = 255)
slug = models.SlugField()
description = models.TextField()
price = models.DecimalField(max_digits=2,decimal_places=2)
category = models.ForeignKey('Category', related_name='categories', on_delete=models.CASCADE)
def __str__(self):
return self.name
def __unicode__(self):
return self.name
class Attribute(models.Model):
name = models.CharField(max_length = 255)
def __str__(self):
return self.name
def __unicode__(self):
return self.name
class Unit(models.Model):
name = models.CharField(max_length = 255)
def __str__(self):
return self.name
def __unicode__(self):
return self.name
class ImageItem(models.Model):
picture = models.ImageField()
item = models.ForeignKey('Item',on_delete=models.CASCADE)
def __str__(self):
return self.item.name + " picture"
def __unicode__(self):
return self.item.name + " picture"
class AttributeCategory(models.Model):
attribute = models.ForeignKey("Attribute", on_delete=models.CASCADE)
category = models.ForeignKey("Category", on_delete=models.CASCADE)
def __str__(self):
return self.category.name + " -> " + self.attribute.name
def __unicode__(self):
return self.category.name + " -> " + self.attribute.name
class AttributeItemValue(models.Model):
attribute = models.ForeignKey('Attribute',on_delete=models.CASCADE)
item = models.ForeignKey('Item',on_delete=models.CASCADE)
numerical_value = models.DecimalField(max_digits=2,decimal_places=2)
text_value = models.CharField(max_length = 255)
unit = models.ForeignKey('Unit',on_delete=models.PROTECT)
def __str__(self):
return self.item.name + " -> " + self.attribute.name + " -> Value"
def __unicode__(self):
return self.item.name + " -> " + self.attribute.name + " -> Value"