有关此主题的答案很多。我读过的这些书都没有帮助我找到出路。
情况:我有一个联系模型,我希望分配一个电子邮件地址。它们位于带有外键的表中。
现在,我想添加一个按钮:“添加电子邮件”,这将打开一个表单。正如我在联系人的详细信息视图中一样,我想将ID移交给表单,以使用联系人pk预先或之后填充电子邮件对象(要联系的fk)。
从我的角度来看,最简单的方法是将pk添加到网址中,并在“ form_valid”中使用它。
视图:
class EmailCreateView(LoginRequiredMixin, CreateView):
model = EmailAddress
fields = ('scope', 'email',) # 'contact',
template_name = 'contacts/contact_form.html'
# initial = {'email': 'test'}
def form_valid(self, form):
form.instance.create_by = self.request.user.username
form.instance.update_by = self.request.user.username
# form.instance.contact = Contact.objects.get(self.kwargs['contact_pk']) <- not working
return super().form_valid(form)
urlpattern:
path('email/add/', EmailCreateView.as_view(), name='add_email'),
模型:
class EmailAddress(CommonInfo):
scope = models.CharField('Bereich', max_length=2, choices=SCOPE_TYPES)
contact = models.ForeignKey(Contact, verbose_name='Kontakt', on_delete=models.CASCADE)
email = models.EmailField('E-Mail')
def __str__(self):
return '{}'.format(self.email)
def get_absolute_url(self):
return reverse('contacts:detail', kwargs={'pk': self.contact_id})
我真的不知道我缺少什么。由于这是数据库开发中的标准案例,因此应该很容易。我几乎可以肯定,我已经忽略了一些简单的事情。但是每当我尝试传递url参数时,都会遇到 NoReverseMatch 错误。
答案 0 :(得分:0)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.create_by = self.request.user.username
self.object.update_by = self.request.user.username
self.object.save()
return super().form_valid(form)