0

Cette forme montrait les boutons radio- lorsque la fonction des vues sur la base, mais changé la case à cocher lorsque j'ai présenté les vues sur la base de la classe, ce qui pourrait être la solution pour ça. Je veux qu'ils soient montrant les boutons radio-nouveauLes boutons radio ne sont pas visibles, au lieu des cases à cocher sont affichées

forms.py

class ProductImagesForm(forms.ModelForm): 
media = forms.ImageField(label='Image') 
featured_image = forms.BooleanField(initial=True) 

def __init__ (self, *args, **kwargs): 
    super(ProductImagesForm, self).__init__(*args, **kwargs) 
    self.fields['featured_image'] = forms.BooleanField(widget = forms.RadioSelect(attrs={'checked': 'true'}, choices=((self.prefix, 'featured'),))) 

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" 

modèle

<form enctype="multipart/form-data" action="" method="post"> {% csrf_token %} 
{{ form.as_p }} 
{{ formset.management_form }} 
<div class="link-formset"> 
{% for obj in formset %} 
{{ obj.as_p }} 
{% endfor %} 
</div> 

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)` 

Répondre

1

Après quelques bonnes recherches et la lecture de la documentation vive, je suis arrivé à point ici, j'espère que cela aidera d'autres personnes aussi

forms.py

class ProductImagesForm(forms.ModelForm): 
     media = forms.ImageField(label='Image') 
     featured_image = forms.BooleanField(initial=True) 

     def __init__ (self, *args, **kwargs): 
      super(ProductImagesForm, self).__init__(*args, **kwargs) 
      self.fields['featured_image'] = forms.BooleanField(queryset=ProductImages.objects.all(), widget = forms.RadioSelect(attrs={'checked': True}, choices=((self.prefix, 'featured_image')),)) 

     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=5) 

modèle

{{ 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>