DJango CreateView没有使用基于类的视图设置DB Key

时间:2017-10-23 02:04:59

标签: python django

我正在使用DJango的CreateView将数据保存到数据库。为此,我按照此处的说明操作:Form handling with class-based views

根据我的理解,在将数据保存到数据库之后,控件将被传递给一种类型的成功屏幕" - 在这种情况下,对于我的场景,控制权将被传递到"详细信息页面"。详细信息页面由以下URL表示:

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

下面(在Mstrstoreheadcontact类中)&#34;详细信息页面&#34;被get_absolute_url函数调用(它是Mstrstoreheadcontact模型的一部分)

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}应该将控件带到&#34;详细信息页面&#34;这将显示已添加到数据库的新记录。

问题

执行上述代码时,变量self.contactid设置为0.见下文:

这会导致以下URL放在地址栏中:

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

由于&#34; 0&#34;,这会导致404错误。在DB中,设置值 - 例如设置为10.

  

同样,数据保存到DB JUST FINE-没有问题   这部分。问题在于保存数据后会发生什么   到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)

似乎代码没有正确地从数据库中获取数据(在保存数据之后)。我该怎么做才能解决问题?

TIA

1 个答案:

答案 0 :(得分: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})