2011-12-30 4 views
0

私は自分のデータベースをリセットして何らかの理由でこのエラーが発生しました:Djangoでは、モデルによって、自動IDフィールドがnull = Trueに設定され、IntegrityErrorを取得します。 "nullではない可能性があります"

IntegrityError: main_funding_rounds_investments.investment_id may not be NULL 

自動IDフィールドがnullになる方法や理由はわかりません。誰かがアイデアを持っているなら、私はそれを大いに感謝します!

私はinspectdbでデシベルをチェックすると、私は次を得る:

class MainFundingRoundsInvestments(models.Model): 
    id = models.IntegerField(primary_key=True) 
    funding_rounds_id = models.IntegerField() 
    investment_id = models.IntegerField() 
    class Meta: 
     db_table = u'main_funding_rounds_investments' 

class MainInvestment(models.Model): 
    id = models.IntegerField(primary_key=True) 
    class Meta: 
     db_table = u'main_investment' 

ここでは私のモデルです:

#funding rounds 
class funding_rounds(models.Model): 
    funded_day = models.IntegerField(null=True) 
investments = models.ManyToManyField("Investment") 

class Investment(models.Model): 
    company = models.ManyToManyField("Company", null=True, related_name  ="Investments_company") 
    financial_org = models.ManyToManyField("Financial_org", null=True, related_name ="Investments_financial_org") 
    person = models.ManyToManyField("Person", null=True, related_name ="Investments_person") 

私が作成した場所ですオブジェクト:

def save_dict_to_db_R(model_class ,dicta): 

testCo = model_class() 

for key,value in dicta.items(): 
    try: 
     field = model_class._meta.get_field(key) 

     if isinstance(field, models.ManyToManyField): 
      continue 
     else: 
      if model_class._meta.get_field(key): 
       print("i == something:" + key + " ") 
       setattr(testCo, key, value) 
    except FieldDoesNotExist: 
     continue 

testCo.save(

for field in model_class._meta.many_to_many: 
    if field.name in dicta and hasattr(dicta[field.name], 'append'): 
     for obj in dicta[field.name]: 
      rel_instance = save_dict_to_db_R(field.rel.to, obj) 
      getattr(testCo, field.name).add(rel_instance) 

答えて

0

は、手動でプライマリキーフィールドを設定しているのはなぜAutoField

+0

これはDjangoによって自動的に設定されます。私はAutoFieldが実際にIntegerFieldだと思いますか? Docs:[Primary Key](https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.primary_key) – Riku

+0

Djangoによって追加された主キーは、データベース、はい。 'AutoField'は、Djangoモデルで作業するときに自動増分フィールドを表すPythonラッパーです。さらに、['inspectdb'](https://docs.djangoproject.com/en/dev/ref/django-admin/#inspectdb)は、モデルフィールドに必要なラッパーを推測することができないので、' IntegerField'をPKはそれがデータベースのように見えるからです。 –

1

を使用してみてください?フィールドをidと異なるものにする必要がある場合や、別の属性を与える必要がある場合を除き、モデルから除外してDjangoに自動的に追加させてください。

直面する問題は、AutoFieldの代わりにIntegerFieldを使用したことですが、自動的に定義が削除された場合は直ちに問題になります。

+0

こんにちは、私の質問の最初のモデルの定義は私のモデルではない、それは私が "manage.py inspectdb"を実行するときに得るものです。私はDjangoに自動的に 'id'を追加させています。私はなぜそれがAutoFieldではないのだろうと思っています。ありがとう! – Riku

関連する問題