如何使用来自同一模型中其他字段的数据自动填充数据库字段

时间:2020-10-25 20:22:37

标签: django

我有一个名为Coverletter的模型,其中包含4个字段:公司,角色,职位发布,内容。

我正在尝试使用前3个字段中的数据填充第4个字段中的数据。

现在,用户使用基于类的视图CreateView输入以下三个字段的值:(公司,角色,职位发布)。

C:/msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../
x86_64-w64-mingw32/bin/ld.exe: nul.exe: final close failed: file truncated

然后,通过get_success_url将用户重定向到另一个基于类的视图UpdateView,其中前三个字段显示为已填充的值。

class CoverletterCreateView(LoginRequiredMixin, CreateView):
model = Coverletter
fields = ['company', 'role', 'job_posting']
template_name = 'coverletter/coverletter_create_form.html'

def form_valid(self, form):
    form.instance.owner = self.request.user
    return super().form_valid(form)


def get_success_url(self):
    return reverse('coverletter:coverletter-create-content',
                   kwargs={'pk': self.object.pk,}
                   )

现在第4个字段(内容)为空白,但是当用户从第一个CreateView提交数据时,我正在尝试填充内容字段。

数据是一个html字符串,看起来像这样:

class CoverletterCreateContentView(LoginRequiredMixin, UpdateView):
model = Coverletter
fields = ['company', 'role', 'job_posting', 'content']
template_name = 'coverletter/coverletter_create_content_form.html'

我对Django和Web开发非常陌生,并且正在努力了解如何做到这一点。我不确定该逻辑在应用程序中的哪个位置。任何指导表示赞赏!

1 个答案:

答案 0 :(得分:1)

首先,与ccbv保持亲密关系。

第二,您使用的是UpdateView,它是-您可以在上面确定的-实现工具,

  • get_initial()
  • get_object()

在内部get_initial()中,您可以使用get_object()获取要尝试更新的模型实例。一旦有了实例,就可以编写字符串。然后将其添加到初始数据中。

结果:


class CoverletterCreateContentView(LoginRequiredMixin, UpdateView):
    ... # fields
    def get_initial(self):
        if not hasattr(self, 'object'):
            self.object = self.get_object(self.get_queryset())
        initial = super().get_initial()
        opening_sentence = (
           f"Dear {self.object.company} I am excited to"
           f" be applying for the {self.object.role} role."
        )
        initial['content'] = opening_sentence  # initial[field_name] (dict)
        return initial
相关问题