ここでDjangoを使用するのが初めてです。私はデータベースにデータを保存するDJangoフォームを作成しようとしています。 「仕事をする」ことであるURLを呼び出す場合、次のようにこれを行うために、私はCreateView
DJango CreateViewはDBにデータを保存する前に属性を設定していません
を使用しています、私はそれが設定されている(ので、パラメータが同様に渡されている)
url(r'^owner/contacts/add/(?P<tenantid>[0-9]+)/$', views.MstrstoreheadcontactCreateView.as_view(), name='owner-contact-add'),
問題:
DBにデータを保存しようと、私が原因ではない適切
に設定されているいくつかのフィールドにあると思われるエラーが発生します私は取得しています正確なエラーメッセージは次のとおりです。上記の例外(ORA-02291:整合性制約 (ORAAPPS.SYS_C009216)違反 - 親キーが見つからないが)直接 原因だった
これは、モデルが定義されている方法です:
class Mstrstoreheadcontact(models.Model):
tenantid = models.ForeignKey('Mstrauthowner', models.DO_NOTHING, db_column='tenantid', blank=True, null=True)
contactid = models.BigIntegerField(primary_key=True)
genderid = models.BigIntegerField(blank=True, null=True)
firstname = models.CharField(max_length=20, blank=True, null=True)
lastname = models.CharField(max_length=20, blank=True, null=True)
officephoneno = models.CharField(max_length=20, blank=True, null=True)
cellphoneno = models.CharField(max_length=20, blank=True, null=True)
class Meta:
managed = False
db_table = 'MstrStoreHeadContact'
それは0(データベースにすでに存在してテーブル用のクラスを自動生成するために使用)inspectdb
オプションを使用して作成されました
このCREATEVIEWはviews.py
class MstrstoreheadcontactCreateView(CreateView):
model = Mstrstoreheadcontact
fields = [ 'firstname', 'lastname', 'officephoneno', 'cellphoneno']
def form_valid(self, form):
self.kwargs['tenantid'] = 10
# returning rendered page
super(MstrstoreheadcontactCreateView, self).form_valid(form)
return render(self.request, self.template_name,
self.get_context_data(form=form))
def get_context_data(self, **kwargs):
ctx = super(MstrstoreheadcontactCreateView, self).get_context_data(**kwargs)
ctx['tenantid'] = self.kwargs['tenantid']
return ctx
で定義されている方法を私の理解では、「フィールド」で定義された属性は、フォーム上で見られるようにしたものだったこと
ました。それでも、「保存」を実行すると、他のフィールドは(エラーログに表示されているように)無視されているように見えます。
今のところself.kwargs['tenantid'] = 10
がCreateView
コードで手動で設定されています。これを修正して、URLで渡される値をとるようにするにはどうすればよいですか。挿入時にフィールドがNoneに設定されているように見えるのはなぜですか?
更新
@dirkgroten - 返信ありがとうございます!指示通りに機能を追加しました。これは私が持っているエラーです。
TypeError at /masterdata/owner/contacts/add/10/ __init__() got an unexpected keyword argument 'tenantid'
Request Method: GET
Request URL: http://127.0.0.1:8000/masterdata/owner/contacts/add/10/
Django Version: 1.11.1
Exception Type: TypeError
Exception Value: __init__() got an unexpected keyword argument 'tenantid'
私もこれを見た:私は、ビューに行くためのフォームを作成するGetting __init__() got an unexpected keyword argument 'instance' with CreateView of Django
How to set ForeignKey in CreateView?
必要がありますか?
入力いただきありがとうございます。関数を追加した後、別のエラーが発生しました。投稿の「更新」部分を参照してください。 –
フィールドのリストに 'tenantid'と' contactid'フィールドを追加します。 – dirkgroten