Form.ModelMultipleChoiceField с виджетом = FilteredSelectMultiple не работает с новым пользовательским администратором DPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Form.ModelMultipleChoiceField с виджетом = FilteredSelectMultiple не работает с новым пользовательским администратором D

Сообщение Anonymous »

Я пытаюсь показать form.ModelMultipleChoiceField на странице новой пользовательской формы администратора, но, похоже, он не показывает его так, как он отображается на уже созданной странице Django, например. страница администратора продукта модели django.
Мои формы.ModelMultipleChoiceField выглядят так:
Показывает, как выглядят мои формы.ModelMultipleChoiceField
Когда это должно выглядеть так:
Показывает, как формируются. ModelMultipleChoiceField должен выглядеть так:
forms.py:

Код: Выделить всё

from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from django.contrib.admin.widgets import FilteredSelectMultiple
from home.models import Collection, Tag, Product

class ProductAssignForm(forms.Form):
from_name = forms.CharField(required=True, max_length=255, label='From Name')
to_name = forms.CharField(required=True, max_length=255, label='To Name')

assign_collections_name = forms.ModelMultipleChoiceField(
queryset=Collection.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name='Collections',
is_stacked=False
),
label='Assign Collection Name'
)
tags = forms.ModelMultipleChoiceField(
queryset=Tag.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name='Tags',
is_stacked=False
),
label='Tags'
)

class Meta:
model = Product
fields = ['collections', 'tags']  # Include the tags field in the fields list

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_method = 'POST'
self.helper.add_input(Submit('submit', 'Assign Products'))

форма частичного кода admin.py:

Код: Выделить всё

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm
list_display = ('name', 'quantity', 'price', 'first_collection')
exclude = ('user', 'updated',)

def save_model(self, request, obj, form, change):
if not obj.user:
obj.user = request.user
obj.save()

def first_collection(self, obj):
first_collection = obj.collections.first()
return first_collection.name if first_collection else 'No collection'

def get_urls(self):
# return [
#     path('assign-products/', self.admin_site.admin_view(self.assign_products), name='assign-products'),
# ] + super().get_urls()
custom_urls = [
path('assign-products/', self.admin_site.admin_view(self.assign_products), name='assign-products'),
*super().get_urls(),
]
return custom_urls

def assign_products(self, request):
opts = self.model._meta
if request.method == 'POST':
form = ProductAssignForm(request.POST)
if form.is_valid():
from_name = form.cleaned_data['from_name']
to_name = form.cleaned_data['to_name']
assign_collections_name = form.cleaned_data['assign_collections_name']
tags = form.cleaned_data['tags']

print(f"Searching products from '{from_name}' to '{to_name}'")

# Normalizing the names by removing whitespace and non-alphanumeric characters
from_name_normalized = ''.join(e for e in from_name if e.isalnum()).lower()
to_name_normalized = ''.join(e for e in to_name if e.isalnum()).lower()

# Search by search_name
products = Product.objects.filter(
search_name__gte=from_name_normalized,
search_name__lte=to_name_normalized
)

print(f"search_handle__gte={from_name_normalized}, search_handle__lte={to_name_normalized}")
print(f"Found {products.count()} products")

for product in products:
if assign_collections_name:
print(f"Assigning collections to product '{product.name}'")
product.collections.set(assign_collections_name)
if tags:
print(f"Assigning tags to product '{product.name}'")
product.tags.set(tags)
product.save()

return HttpResponseRedirect(request.path_info)
else:
form = ProductAssignForm()

context = dict(
self.admin_site.each_context(request),
title="Assign Products",
form=form,
opts=opts,
**self.admin_site.each_context(request),
)
return render(request, 'admin/assign_products.html',  context)
assign_products.html:

Код: Выделить всё

{% block extrahead %}
{{ block.super }}
{{ form.media }}






{% endblock %}

{% block javascript %}
{{ block.super }}

django.jQuery(document).ready(function() {
django.jQuery('.selectfilter').filterchain();
});

{% endblock %}

{% block breadcrumbs %}

[url={% url ]{% translate 'Home' %}[/url]
› [url={% url opts|admin_urlname:]{{ opts.verbose_name_plural|capfirst }}[/url]
› [url={% url ]{% translate 'Assign Products' %}[/url]

{% endblock %}

{% block content %}

{% translate 'Assign Products' %}

{% csrf_token %}
{% for field in form %}

{{ field.label }}
{{ field }}
{% if field.help_text %}
{{ field.help_text }}
{% endif %}
{% for error in field.errors %}
{{ error }}
{% endfor %}

{% endfor %}
{% translate 'Assign Products' %}


{% endblock %}
Я пробовал хрустящие формы и нормальные формы, я пробовал спрашивать ChatGPT и ClaudeAI и даже поиск в Google.
Будем очень благодарны за помощь!

Подробнее здесь: https://stackoverflow.com/questions/787 ... working-on
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Jquery
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Javascript
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Jquery
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Конфликт JS между пользовательским виджетом и элементом календаря формы
    Anonymous » » в форуме Jquery
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Django Form DateInput с виджетом в обновлении: потеря начального значения
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»