2017-10-24 19 views
0

goods.pydjango.db.utils.IntegrityError:(1048、 "column 'category_id'はnullにできません)?

class Goods(models.Model): 
    category = models.ForeignKey(GoodsCategory, verbose_name='xxx') 
    goods_sn = models.CharField(default='', max_length=50, verbose_name='xxx') 
    name = models.CharField(max_length=300, verbose_name='xxx') 
    click_num = models.IntegerField(default=0, verbose_name='xxx') 
    sold_num = models.IntegerField(default=0, verbose_name='xxx') 

import_goods_data.py goods.pyで

from apps.goods.models import Goods, GoodsCategory, GoodsImage 

from db_tools.data.product_data import row_data 

for goods_detail in row_data: 
    goods = Goods() 
    goods.name = goods_detail['name'] 
    goods.market_price = float(int(goods_detail['market_price'].replace('¥', '').replace('&', ''))) 
    goods.shop_price = float(int(goods_detail['sale_price'].replace('&', '').replace('元', ''))) 
    goods.goods_brief = goods_detail['desc'] if goods_detail['desc'] is not None else '' 
    goods_goods_desc = goods_detail['goods_desc'] if goods_detail['goods_desc'] is not None else '' 
    goods.goods_front_image = goods_detail['images'][0] if goods_detail['images'] is not None else '' 

    category_name = goods_detail['categorys'][-1] 
    category = GoodsCategory.objects.filter(name=category_name) 
    if category: 
     goods.category = category[0] 
    goods.save() 

、ない 'CATEGORY_ID'、なぜエラーが出る 'import_goods_data.py' を実行:

_mysql.connection.query(self, query) 
django.db.utils.IntegrityError: (1048, "Column 'category_id' cannot be null") 

、 'category_id'を追加する必要がありますか?

答えて

0

categoryは必須フィールドですが、その名前のカテゴリが存在しない場合は、goods.categoryを設定していません。

これはどのように処理するかはあなた次第です。

categories = GoodsCategory.objects.filter(name=category_name) 
if categories.exist(): 
    category = categories[0] 
else: 
    category = GoodsCategory.objects.create(name=category_name) 
goods.category = category[0] 

nameフィールドが一意である場合は、get_or_createを使用してコードを単純化できます。おそらく、あなたはそれが存在しない場合は、カテゴリを作成します。

category, created = GoodsCategory.objects.get_or_create(name=category_name) 
goods.category = category 
+0

あなたはありがとうございます! – mmy

+0

私もこの問題に遭遇しましたが、私はこの答えに従って解決しましたが、無効でした。私はあなたと同じプロジェクトをしました。 – kerberos

+0

あなたは私に手を差し伸べることができますか? – kerberos

関連する問題