私は2つのDjangoモデル、ModelA
とModelB
を持っています。後者には、前者との外部キーのリンクがあります。Djangoモデルのインスタンスが保存されているかどうか
class ModelA(models.Model):
item = models.BooleanField(default=True)
class ModelB(models.Model):
modela = models.ForeignKey(ModelA)
answer = models.SmallIntegerField(null=True, blank=True)
生産コードでは、ModelA
のインスタンスが保存されます。同じ機能の間に、ModelB
のインスタンスを自動的に保存するように見えますが、これはテンプレートでアクセスされるためです。まず
def view(request):
a = ModelA()
a.item = True
a.save()
b = ModelB.objects.filter(modela_id=a.id)
return render(request, 'template.html', context=locals())
、これは私はコードが仕事をしたいかですが、私はModelB
のインスタンスが保存されているかどうかはわかりませんよ。 (これは継承されたコードです - 私はコードベース内のどこにいても、信号を見つけたり、ModelBを呼び出すことができません。
第2に、この動作はローカル開発では機能しなくなりました(ただし、同一のコードを使用しています)。 ModelB
は保存されないため、b
はNone
を返します。私はコードの古い枝が同じ問題を抱えているので、コードの問題ではないと確信しています。私はローカルデータベースを以前のバージョンに復元しようとしましたが、無駄です。最近変更されたのは、移行ファイルの負荷が急増したことだけです。
誰でもこれらの質問にお答えできますか?私はDjango 1.11を実行しています。
ModelBインスタンスを保存するコードが見つからない場合は、コードへのアクセスが制限されていると思いますか? – hspandher
コードで、ModelBは決して存在しません。フィルタクエリは空でなければなりません。 ModelAを作成して保存し、ModelAにリンクするModelBインスタンスを検索するフィルタ条件でModelBのみを検索します。これは、ModelAにリンクしているModelBインスタンスを作成して保存するModelAにpost_saveハンドラがある場合にのみ機能します。 これが本番環境で動作する理由:表示される実動コードが、システムの導入時に実行されたものと同じであることを確認してください。再起動しなければ、プロダクションサーバーで使用されているファイルより新しい* .pyファイルが表示されることがあります。 – ingofreyer
申し訳ありませんが、これは絶望的に掲載されました。あなたは完全に正しいです@ingofreyer - 私は問題がMySQLデータベースでこの動作のトリガーがあることがわかった - トリガーは、ローカルデータベースへのコピーから逃していた。これが起こっていると言うコードにはまったく何もありません! – qmsack