Django: выбор радио для изображений, представленных в горизонтальном выравнивании в виде HTML - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужна опция в html-форме, где можно выбрать только одно изображение (что-то типа радио), и эти изображения представлены в горизонтальном выравнивании.

Мои старшие сделали это с помощью Django ModelForm и представлений на основе классовно созданное мной представление основано на функциях, и я использую html-форму вместо django-формы. Ниже приведены views.py, models.py и forms.py, созданные старшими.

models.py

class Persona(models.model):
    name = models.CharField()
    image = models.ForeignKey(Image,on_delete=models.CASCADE,limit_to_choices={'choice_model':'profile'},)
    def __str__(self):
        return self.name

class Image(models.Model):
    image =models.CharField(max_length=120,null=True)
    choice_model =models.CharField(max_length=120)
    def __str__(self):
        return self.image

forms.py

class HorizontalRadioSelect(forms.RadioSelect):
    template_name = 'dashboard/horizontal_select.html'

class CustomChoiceField(forms.ModelChoiceField):
    def label_from_instance(self,obj):
        return mark_safe("<img src='%(media_url)simages/%(image)s' width=50 height=50/> " % {'media_url':settings.MEDIA_URL,'image':obj.image})

class PersonaForm(forms.ModelForm):
    persona_name  = forms.CharField(label='Persona Name', max_length=100)
    image     = CustomChoiceField(widget=HorizontalRadioSelect(), queryset=Image.objects.filter(choice_model="profile"),initial='1')

views.py

class PersonaCreateView(LoginRequiredMixin,TemplateView):
    form_class = PersonaForm
    template_name = "dashboard/c_persona.html"
    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {"form": form})
    def post(self,request):    
        form = PersonaForm(data=request.POST)
        if form.is_valid():
            persona = form.save()
        else:
            print(form.errors)
            return HttpResponseRedirect('/persona/')

Ниже приведены html-форма и views.py, которые были сделаны мной.

HTML-форма

<form method="get">
<div>

    </i><strong>Enter Persona Name</strong>: &nbsp <input type="text" name="persona_name" , required="",>
    </i><strong>Select Image</strong>: 'I need your help here.I need a horizontal options of images from which i can select only one image'
    <input type="submit" name="Save">
    </form>

views.py

def CreatePersonaView(request):
    p_name = request.GET.get('persona_name')
    p_image = #I don't know what to do here as i haven't written code for this in html form.But i want to do this task from GET request.
    persona = Persona(name=p_name,image=p_image)
    persona.save()
    return render('request', 'dashboard/c_persona.html')
...