我正在使用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模型的一部分)
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。
以下是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
答案 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})