【问题标题】:Radio-buttons are not displayed in the Class Based Views, its the check-boxes showing基于类的视图中不显示单选按钮,其复选框显示
【发布时间】:2017-05-23 05:36:56
【问题描述】:

单选按钮未显示,其复选框显示在基于类的视图中。我希望他们显示单选按钮

forms.py

class ProductImagesForm(forms.ModelForm):
media = forms.ImageField(label='Image')

def __init__ (self, *args, **kwargs):
    super(PerstransForm, self).__init__(*args, **kwargs)
    self.fields['featured_image'] = forms.BooleanField( widget = forms.RadioSelect(choices=((self.prefix, 'featured'),))

def add_prefix(self, field):
    if field == 'featured_image': return field
    else: return self.prefix and ('%s-%s' % (self.prefix, field)) or field

class Meta:
    model = ProductImages
    fields = ['media', 'featured_image']

 ImagesFormset = modelformset_factory(ProductImages, fields=('media', 'featured_image'), extra=1)

models.py

 def product_download(instance, filename):
return '%s/%s' %(instance.product.slug, filename)

class ProductImages(models.Model):
    product = models.ForeignKey(Product)
    title = models.CharField(max_length=120)
    media = models.ImageField(upload_to=product_download, 
       width_field='max_width', 
       height_field='max_height',
       null=True, blank=True)
    max_width = models.CharField(max_length=100, null=True, blank=True)
    max_height = models.CharField(max_length=100, null=True, blank=True)
    featured_image = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
       return unicode(self.media)

class Meta:
    verbose_name = "product image"
    verbose_name_plural = "product images"

Views.py

def get(self, *args, **kwargs):
    self.object = self.get_object()
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    formset = ImagesFormset(queryset=ProductImages.objects.none())
    return self.render_to_response(self.get_context_data(form=form, formset=formset))

def post(self, request, *args, **kwargs):
    self.object = self.get_object()
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    formset = ImagesFormset(self.request.POST, self.request.FILES)
    form_valid = form.is_valid()
    formset_valid = formset.is_valid()
    if form_valid and formset_valid:
        seller = self.get_account()
        form.instance.seller = seller
        self.object = form.save()
        media = formset.save(commit=False)
        for img in media:
            img.product = self.object
            img.save()
        formset.save()
        return self.form_valid(form, formset)
    else:
        return self.form_invalid(form, formset)`

模板

<form enctype="multipart/form-data" action="" method="post"> {% csrf_token %} 


{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
{{ form.as_p }}

{{ formset.management_form }}
<div class="link-formset">
{{ formset }}
{% for choice in formset.featured_image %}

  <ul>
  <li><input type="radio" name="featured"></li>
</ul>
{% endfor %}
</div>




<input type="submit" value="{{ submit_btn }}">
</form>

希望有人能帮我补上缺失的部分

【问题讨论】:

  • @DanielRoseman,希望你能帮我解决这个问题

标签: django django-models django-forms django-templates django-views


【解决方案1】:

这会发生,因为您选择 BooleanField,这意味着特定选择是 0 或 1,并且单选按钮用于从多个选项中选择一个选项,因此您应该尝试使用 forms.ChoiceField 而不是 forms.BooleanField。 更多详情请阅读官方django doc

【讨论】:

  • 当我使用forms.ChoiceField时它仍然显示复选框
  • 您是否相应地更改了模板代码example
  • 我已经这样做了,因为它显示在上面的模板代码中,它仍然呈现复选框
【解决方案2】:

我已经到了某个点,我想它会帮助一些人

模板

{{ formset.management_form }}
<div class="link-formset">
{% for choice in formset %}

<div>
  {{ choice.media }}
 <input type="radio" name="{{choice.featured_image.label}}">{{ choice.featured_image.label }}</
</div>
{% endfor %}
</div>

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2021-05-30
    • 2017-10-22
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2013-10-30
    相关资源
    最近更新 更多