Многообразный Select ManytoMany в Джанго

Я нуждаюсь в том, чтобы создать multiselect со стоимостью поля ManyToManyField, в одном сдержись html в Джанго.

Мой файл model.py

from othermodel.models import Othermodel

class whatever(models.Model):
    whateverfield = models.ManyToManyField(Othermodel,related_name="whateverfield")

Мой файл form.py

class PostForm(forms.ModelForm):
class Meta:
    model = whatever
    fields = (
        'whateverfield'
    )

    def __init__(self, *args, **kwargs):

    super(PostForm, self).__init__(*args, **kwargs)

    self.fields['whateverfield'] = forms.ModelMultipleChoiceField(
        queryset=Othermodel.objects.all(), 
        required=True, 
        widget=forms.SelectMultiple,)

Мой файл views.html

   @login_required
  def whatever_edit(request,pk):

    if request.method == 'POST':
       #guarda el formulario de edit.html sin problema
    else:
       form = PostForm()

    whatever = Whatever.objects.filter(pk=pk).prefetch_related('othermodel')
    Othermodel = Othermodel.objects.all()

   return render(request, 'casinos/edit.html', {
     'whatever': whatever,
     'Othermodel': Othermodel,
   })

И select в моем файле edit.html, который очевидно ошибочный:

        <select name="whatever" class="form-control" multiple>
         {% for w in Othermodel %}
         {% for c in whatever.Othermodel.all %}
         {% if c.id == w.id %}
         <option value="{{w.id}}" selected="selected">{{w.name}}</option>
         {% else %}
          <option value="{{w.id}}">{{w.name}}</option>
         {% endfor %}
         {% endif %}
         {% endfor %}
         </select>

Я пробовал с comprehensions, но не встретил клавиши, так как они достаточно сложные в templates Джанго. Также я попробовал воспроизводить это посредством {{form.whateverfield}}, но у меня не выходит отборной стоимость.

Я издаю: Я попробовал использовать UpdateView, но не, как показывание multiselect

    <select class="form-control {% if form.game_provider.errors %}is-invalid{% endif %}" name="game_provider" multiple="multiple"/>
    <option value="{% if form.errors %}{{ form.game_provider.value }}{% else %}{{ casinos.game_provider.all }}{% endif %}"></option> 
   </select>

Потому что {{form.as_table}} и {{form.as_p}}, кроме того, что он возвращает мне формуляр без стилей, он возвращает мне options multiselect с:

whatever.object (1) whatever.object (2)

0
задан 20.03.2019, 18:59
3 ответа

В конце концов это resolvГ - следующего способа:

Мой файл views.py

   class UpdateCasinos(UpdateView):
       form_class = PostForm
       model = Whatever
       template_name = 'Whatever/edit.html'
       success_url = '/Whatever/'

      def post(self, request, *args, **kwargs):

         pk = self.kwargs.get('pk', None)

         whatever = Whatever.objects.get(pk=pk)
         form = PostForm(request.POST or None, instance=whatever)

         if request.POST and form.is_valid():
            self.object = form.save()
            return HttpResponseRedirect(self.get_success_url())
         else:
             errors = form.errors
             return render(request, self.template_name, {
                'form':form,
                'errors':errors
             })

И мой файл form.py

from django.forms.models import ModelMultipleChoiceField

class MyMultipleModelChoiceField(ModelMultipleChoiceField):

    def label_from_instance(self, obj):
        return "%s" % (obj.name)

class PostForm(forms.ModelForm):

    class Meta:
        model = Whatever
        fields = (
            'whateverfield',
            )

    def __init__(self, *args, **kwargs):

        # call the parent init
        super(PostForm, self).__init__(*args, **kwargs)

        self.fields['whateverfield'] = MyMultipleModelChoiceField(
            queryset=Whatever.objects.all(), 
            required=True, 
            widget=forms.SelectMultiple())
0
ответ дан 02.12.2019, 05:27

Привет ты мог бы пробовать используя widget:

у Меня Есть следующие models :

class Tema(models.Model):
    TEMA_CHOICES = (
        ('tecnologia', 'Tecnologia'),
        ('novela', 'Novela'),
        ('psicologia', 'Psicologia'),
    )
    nombre = models.CharField(max_length=20,choices=TEMA_CHOICES, unique=True)

    def __str__(self):
        return self.nombre

class Libro(models.Model):
  ...
  ..
   temas = models.ManyToManyField(Tema)

во мне form был бы чем-то asГ-:

from django import forms
from miApp.models import Tema, Libro

class LibroForm(forms.ModelForm):
    ....
    ....
    temas = forms.ModelMultipleChoiceField(queryset=Tema.objects.all(), widget=forms.CheckboxSelectMultiple(), required=False)

во мне сдержись:

{{ form.temas }}

Надеялся, что он подает тебя, и удача.!!

1
ответ дан 02.12.2019, 05:27
  • 1
    Большое спасибо из-за твоего ответа. Если ты замечаешь в моем файле form.py, уже у меня есть widget. Проблема, - когда я помещаю {{form.wathever}}, не выбирается ningú n option. – Miguel Herreros Cejas 19.03.2019, 22:52

Прицел в этом проекте это было то q я сделал

class AddPub(CreateView):
      model=Pub
      form_class=PubForm
      template_name='plantilla.html'
     success_url='/url'

     def get(self, request, *arg, **kwargs):
             form = self.form_class(initial={'nombre campo 
             select':'valores a marcar'})
              return render(request, self.template_name, context={'form':form})

Я надеюсь, что он подает тебе

1
ответ дан 02.12.2019, 05:27

Теги

Похожие вопросы