首页 > 解决方案 > 如何在 django templatetag 中传递参数或调用表单中的有效形式,就像在视图中一样?

问题描述

嗨,伙计们,我想添加 CreateView 以便可以访问我的所有网页,所以我选择了模板标签,它可以很好地显示表单,但无法保存。我相信是因为我希望在保存表单之前自动添加的用户字段。在 Views.py 中非常简单。

class BusinessCreate(LoginRequiredMixin, CreateView):
    model = Business
    form_class = BusinessAddForm
    template_name = 'business/form.html'

    def form_valid(self, form):
        form.instance.user = self.request.user # this is what i want to add in templatetags
        messages.success(self.request, 'successfully created your biashara')

        return super().form_valid(form)

这是我的 form.py

class BusinessAddForm(ModelForm):
    logo = forms.ImageField(label='', required=False, widget=forms.FileInput(attrs={'placeholder': 'your logo'}))
    description = forms.Field(label='', widget=forms.Textarea(attrs={'placeholder': 'Describe your biashara'}))
    name = forms.CharField(label='', widget=forms.TextInput(attrs={'placeholder': 'Your biashara name'}))
    email = forms.EmailField(label='', required=True, widget=forms.TextInput(attrs={'placeholder': 'Email'}))

    class Meta:
        model = Business
        fields = (
            'name', 'logo', 'email', 'description')

现在我有一个模板标签 templatetags/business.py

from django.template import Library

from business.forms import BusinessAddForm

register = Library()

@register.inclusion_tag('includes/business_form.html', takes_context=True)
def get_business_form():
    form = BusinessAddForm()
    return {
        'form': form,
    }

这可以很好地呈现表单但不保存。虽然没有错误。那么在哪里可以将当前登录的用户添加到用户字段?

我的模型.py

class Business(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=200, blank=True, null=True)
    user = models.ForeignKey(User, related_name='added_by', on_delete=models.PROTECT)
    logo = models.ImageField(upload_to="business/logos", blank=True, null=True)
    email = models.EmailField(help_text="This is required")
    description = models.TextField(blank=True, null=True)

提前谢谢大家

标签: pythondjangotemplatetags

解决方案


推荐阅读