Django:提交表单时,自动填写字段

Django: When form is submitted, auto-fill a field

我希望在提交表单时自动填写一个字段,以便它与另一个字段相同。

我有一个带有 modelForm 的 createView。这个想法是用户写 his/hers 名称,然后在提交时也填写 display_name 字段。我知道这很奇怪 "why have two of the same",但它是有目的的。

这是我的代码 - 我猜我需要创建一个上下文来获取 display_name 并将其设置为等于名称?

views.py

class CreateIdentity(CreateView):
    template_name = 'admin/CreateIdentity.html'
    model = Identity
    form_class = CreateIdentityForm
    queryset = Identity.objects.all()

    def get_context_data(self, **kwargs):
        context = super(CreateIdentity, self).get_context_data(**kwargs)
        context["user_id"] = User.objects.get(username=self.request.user)  
        return context

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

    def get_success_url(self):
        return reverse_lazy("view_identity_created_with_slug", kwargs={'slug': self.object.slug})

models.py

class Identity(models.Model):
    name = models.CharField(max_length=200, null=False)
    display_name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=100)
    user_id = models.ForeignKey(User, db_column="username", on_delete=models.CASCADE, null=False)

forms.py

class CreateIdentityForm(forms.ModelForm):
    name = forms.CharField(required=True, widget=forms.TextInput(attrs={
        'spellcheck': "false",
        "class": "identity_name_input",
        'placeholder': "Write your identity"}),
    )

    class Meta:
        model = Identity
        fields = ["name"]

    def __str__(self):
        return self.name

.form_valid(…) [Django-doc]中,可以根据form清理后的数据指定display_name

class CreateIdentity(CreateView):
    template_name = 'admin/CreateIdentity.html'
    model = Identity
    form_class = CreateIdentityForm
    queryset = Identity.objects.all()

    def get_context_data(self, **kwargs):
        context = super(CreateIdentity, self).get_context_data(**kwargs)
        context["user_id"] = User.objects.get(username=self.request.user)  
        return context

    def <b>form_valid</b>(self, form):
        form.instance.user_id = self.request.user
        form<b>.instance.display_name = form.cleaned_data['name']</b>
        return super().form_valid(form)

    def get_success_url(self):
        return reverse_lazy("view_identity_created_with_slug", kwargs={'slug': self.object.slug})