Я нуждаюсь в том, чтобы создать 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)
В конце концов это 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())
Привет ты мог бы пробовать используя 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 }}
Надеялся, что он подает тебя, и удача.!!
Прицел в этом проекте это было то 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})
Я надеюсь, что он подает тебе