1
我store_categories_data有一個嵌套orderDict像下面創建已嵌套orderDict
store_categories_data
OrderedDict([('product', OrderedDict([('image', OrderedDict([('image', <InMemoryUploadedFile: bag.jpg (image/jpeg)>)])),
('name_of_product', 'Ladies Pink Bag'), ('description', 'description'), ('price', Decimal('1600')), ('active', True)])),
('store_category', 'BAGS')])
我想通過像圖片,名稱,說明等所有的產品信息,但有3 orderDict對象。 如何將值傳遞給get_or_create()以創建store_categories對象?
我的代碼
class ProductSerializers(ModelSerializer):
image = ProductImageSerializer()
class Meta:
model = Product
fields=('id','image','name_of_product','description','price','active',)
class StoreCategorySerializer(ModelSerializer):
product = ProductSerializers()
class Meta:
model = StoreCategory
class StoreCreateSerializer(ModelSerializer):
store_categories = StoreCategorySerializer()
merchant = UserSerializer()
class Meta:
model = Store
fields=("id",
"merchant",
"store_categories",
"name_of_legal_entity",
"pan_number",
"registered_office_address",
"name_of_store",
"store_contact_number",
"store_long",
"store_lat",
"store_start_time",
"store_end_time",
"store_off_day",
)
def create(self,validated_data):
store_categories_data = validated_data.pop('store_categories')
merchant_data = validated_data.pop('merchant')
for merchantKey, merchantVal in merchant_data.items():
try:
merchant,created = User.objects.get_or_create(username=merchantVal)
print('merchant',merchant)
print(type(merchant))
validated_data['merchant']=merchant
store = Store.objects.create(**validated_data)
print('__________________________________')
image = store_categories_data["product"].pop("image")
image_instance = ProductImage(**image)
print('image_instance',image_instance)
product = store_categories_data["product"]
print('product creation returns',product['name_of_product'])
product_instance = Product(
image=image_instance,
name_of_product=product['name_of_product'],
description=product['description'],
price=product['price'],
active=product['active']
)
print('product_instance',product_instance)
store_category = store_categories_data['store_category']
print('store_category',store_category)
store_category = StoreCategory(product=product_instance, store_category=store_category)
print('store category instance',store_category)
return store
except User.DoesNotExist:
raise NotFound('not found')
Models.py
class Store(models.Model):
merchant = models.ForeignKey(User)
name_of_legal_entity = models.CharField(max_length=250)
pan_number = models.CharField(max_length=20)
registered_office_address = models.CharField(max_length=200)
name_of_store = models.CharField(max_length=100)
store_off_day = MultiSelectField(choices=DAY, max_length=7, default='Sat')
store_categories = models.ManyToManyField('StoreCategory',blank=True)
class Product(models.Model):
store = models.ForeignKey(Store)
image = models.ForeignKey('ProductImage',blank=True,null=True)
name_of_product = models.CharField(max_length=120)
description = models.TextField(blank=True, null=True)
price = models.DecimalField(decimal_places=2, max_digits=20)
active = models.BooleanField(default=True)
class ProductImage(models.Model):
image = models.ImageField(upload_to='products/images/')
@property
def imageName(self):
return str(os.path.basename(self.image.name))
class StoreCategory(models.Model):
product = models.ForeignKey(Product,null=True, on_delete=models.CASCADE,related_name="store_category")
store_category = models.CharField(choices=STORE_CATEGORIES, default='GROCERY', max_length=10)
我得到這個錯誤TypeError:'product'是這個函數的無效關鍵字參數。錯誤在線product_instance = Product(image = image_instance,product = product) – milan
我使用您提供的代碼更新了我的代碼。現在,當試圖在序列化器「StoreCategorySerializer」上獲得字段'product'的值時,出現'Got AttributeError'錯誤。 序列化程序字段可能命名錯誤,並且不匹配「ManyRelatedManager」實例上的任何屬性或鍵。 原始異常文本爲:'ManyRelatedManager'對象沒有屬性'product'。'同時試圖發佈。由於上述錯誤, – milan
類別和產品未保存到數據庫。 – milan