【问题标题】:Is it possible to add placeholder in generic Create view form?是否可以在通用创建视图表单中添加占位符?
【发布时间】:2018-08-25 20:52:41
【问题描述】:

这是我的 models.py 文件

class Report_item(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=255)
    item_type = models.CharField(default="", max_length=100)
    location = models.CharField(max_length=60)
    city = models.CharField(max_length=60)
    date = models.DateTimeField(default=timezone.now)
    Description = models.TextField(blank=True,null=True)
    publish = models.BooleanField(default=False)

    image = models.ImageField(default="add Item image")

    def __str__(self):
        return self.title + "      " + str(self.publish)

    def get_absolute_url(self):
        return reverse('feed:detail', kwargs={'pk': self.pk})

    class Meta:
        ordering = ["-date"]

我在我的模板中添加了通用的从模型创建视图。 views.py 文件如下:

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.owner = self.request.user
        self.object.save()
        return FormMixin.form_valid(self, form)

我想在我的表单中添加一个占位符。是否可以在通用创建视图表单中添加占位符?请为一个字段添加一个占位符,我会做的。

【问题讨论】:

  • 你的意思是默认值吗?
  • 我的意思是这个 我们在 html 表单中使用的占位符

标签: python django python-3.x django-models django-forms


【解决方案1】:

对于通用视图,您可以这样做:

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']


    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()

        form = super(ReportCreate, self).get_form(form_class)
        form.fields['field_to_add_placeholder'].widget = forms.TextInput(attrs={'placeholder': 'Your placeholder'})
        return form

    # rest of the class...

this answerdocs on widgets

对于ModelForm,请参阅文档的this part。您可以通过添加占位符属性来覆盖默认字段,在这种情况下是小部件:

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'placeholder': 'Enter your name here'}),
        }

【讨论】:

  • 我有这个创建视图类 ReportCreate(generic.CreateView): 当我试图在这个视图中添加元数据时没有任何反应。
  • 您特别要求ModelForm,我将根据您的一般视图编辑我的答案。
  • 我很抱歉我的错误。是的,请帮助我。
  • 类 ReportCreate(generic.CreateView): model = Report_item fields = ['title', 'item_type', 'location', 'city', 'image', 'Description'] def get_form(self , form_class): form = super(ReportCreate, self).get_form(form_class) form.fields['title'].widget = forms.TextInput(attrs={'placeholder': 'Your placeholder'}) return form def form_valid( self, form): self.object = form.save(commit=False) self.object.owner = self.request.user self.object.save() return FormMixin.form_valid(self, form)
  • 我这样做了,但我收到了服务器错误 (500)。
【解决方案2】:

谢谢@cyrlop,你的回答很棒。但如果有人不想更改从模型本身获取的小部件的类型,我发现这更合适

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']


    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()

        form = super(ReportCreate, self).get_form(form_class)
        form.fields['field_to_add_placeholder'].widget.attrs ={'placeholder': 'Your placeholder','class':'someclass'}
        return form

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2019-06-05
    相关资源
    最近更新 更多