2017-10-23 16 views
0

DJangoのCreateViewを使用してDBにデータを保存しています。これを行うには、私はここに指示に従っています:Form handling with class-based views DJango CreateViewがクラスベースのビューでDBキーを設定しない

私の理解によると、データがDBに保存された後、コントロールは "成功画面"のタイプに渡されます - この場合、私のシナリオでは、コントロールは "詳細ページ"に渡されます。詳細ページは以下のURLで表されます。

以下
url(r'^owner/(?P<pk>[0-9]+)/contact/details/$', views.MstrstoreheadcontactDetailsView.as_view(), 
     name='owner-contact-details'), 

(中クラスMstrstoreheadcontact)から

(Mstrstoreheadcontactモデルの一部である)get_absolute_url関数によって呼び出されている「詳細ページ」私にとってはmodels.pyファイル

class Mstrstoreheadcontact(models.Model): 
    tenantid = models.ForeignKey('Mstrauthowner', models.DO_NOTHING, db_column='tenantid', blank=True, null=True) 
    contactid = models.BigIntegerField(primary_key=True, default=0) 
    genderid = models.BigIntegerField(blank=True, null=True, default=0) 
    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' 

    def get_absolute_url(self): 
     return reverse('masterdata:owner-contact-details', kwargs={'pk': self.contactid}) 

コード:return reverse('masterdata:owner-contact-details', kwargs={'pk': self.contactid}をDBに追加された新しいレコードを表示する「詳細ページ」への制御を取ることになっています。

問題

上記のコードが実行されると、変数self.contactidは下記を参照0に設定されている:

このアドレスバーに配置するために、次のURLになる:

http://127.0.0.1:8000/masterdata/owner/0/contact/details 

"0"のため、これは404エラーにつながります。 DBでは、値が設定されている - DBはちょうど この部分に問題がない微に例えば10

に再び、データが保存されます。問題は、データが にDBに保存された後に何が起こるかにあります。以下は

enter image description here

はurls.pyファイルからurls.pyファイル

からいくつかのエントリです

url(r'^owner/(?P<pk>[0-9]+)/contact/details/$', views.MstrstoreheadcontactDetailsView.as_view(), 
     name='owner-contact-details'), 

url(r'^owner/(?P<tenantid>[0-9]+)/contacts/add/$', views.MstrstoreheadcontactCreateView.as_view(), 
     name='owner-contact-add'), 

views.pyファイルから

class MstrstoreheadcontactCreateView(CreateView): 
    model = Mstrstoreheadcontact 
    fields = [ 'firstname', 'lastname', 'genderid', 'officephoneno', 'cellphoneno'] 

    def form_valid(self, form): 
     contact = form.save(commit=False) 
     contact.tenantid = Mstrauthowner.objects.get(tenantid=self.kwargs['tenantid']) 
     return super(MstrstoreheadcontactCreateView, self).form_valid(form) 

コードiのようです(データが保存された後に)DBからデータを正しく戻さない。問題を解決するために私は何ができますか?

TIA

答えて

0

デバッガにはうってつけです。次の変更が

views.py

class MstrstoreheadcontactCreateView(CreateView): 
    model = Mstrstoreheadcontact 
    fields = [ 'firstname', 'lastname', 'genderid', 'officephoneno', 'cellphoneno'] 

    def form_valid(self, form): 
     form.instance.tenantid = Mstrauthowner.objects.get(tenantid=self.kwargs['tenantid']) 
     return super(MstrstoreheadcontactCreateView, self).form_valid(form) 

models.py

class Mstrstoreheadcontact(models.Model): 
    tenantid = models.ForeignKey('Mstrauthowner', models.DO_NOTHING, db_column='tenantid', blank=True, null=True) 
    contactid = models.BigIntegerField(primary_key=True, default=0) 

    [... snip ..] 

     def get_absolute_url(self): 
     [... snip ...] 
     return reverse('masterdata:owner-contact-details', kwargs={'pk': self.tenantid.pk}) 
:-)私のためにすべての問題を解決しました
関連する問題