Пользовательский HTML для поля ManyToMany в ModelForm - PullRequest
0 голосов
/ 05 декабря 2011

В настоящее время я работаю над формой, которая отображает информацию о конкретном продукте на моем веб-сайте.Каждая цена представлена ​​объектом Цена , и каждый Предмет имеет несколько объектов Цена , связанных с ним.Я создал ModelForm для отображения данных в моем Item , который работает.Однако, когда я пытаюсь отобразить поле ManyToMany в моей ModelForm, я получаю небольшую коробку, в которой перечислены все мои Price объекты.Мне нужно отобразить пользовательский HTML-код для объектов Price , чтобы они могли взаимодействовать с некоторым имеющимся у меня JavaScript.Ниже приведен код, который у меня есть:

class Item(models.Model):
    user        = models.ForeignKey(User)
    name        = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)
    category    = models.ForeignKey(Category)
    prices      = models.ManyToManyField(Price, blank=True)
    images      = models.ManyToManyField(Image)
    runs        = models.ManyToManyField(ActivityRun, blank=True)
    date_added  = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.name

class ItemForm(ModelForm):
    class Meta:
        model = Item
    description = forms.CharField(widget=TinyMCE())

@login_required
def edit_item(request, item_id):
    item = get_object_or_404(Item, pk=item_id)
    if request.method == 'POST':
        form = ItemForm(request.POST, request.FILES, instance=item)
        if form.is_valid():
            return HttpResponseRedirect("/items/")
    else:
        form = ItemForm(instance=item)

    return render(request, 'edit_item.html', {'form': form})

И часть моего шаблона, которую я пытаюсь отобразить:

{% for price in form.prices %}
    <span class="price_box" style="width: 200px;">
        <a href="#" class="remove_price">x</a>{{ price.name }} ${{ price.price }}
    <input type="hidden" name="price_name" value="{{ price.name }}">
    <input type="hidden" name="price_cost" value="{{ price.price }}">
    </span>
{% endfor %}

Я не совсем уверен, как это сделать,,.

В частности, как мне изменить HTML-код для отображения множества форм в моей форме?

1 Ответ

0 голосов
/ 07 декабря 2011

Один из подходов заключается в использовании inline_modelformset для редактирования ваших цен. Это, вероятно, потребует от вас изменения модели вашего предмета, чтобы не иметь M2M для цены, а вместо этого иметь предмет в качестве FK для цены.

Таким образом, вы можете использовать пользовательскую форму для Price и иметь один или несколько экземпляров PriceForm, которые будут автоматически связаны с Item. Формсет также будет иметь функцию удаления, которую вы можете обрабатывать через Ajax, если хотите. Вы также можете динамически добавлять / удалять формы.

Надеюсь, это поможет вам.

...