Как реализовать упорядоченное отношение many2many в админке Django - PullRequest
0 голосов
/ 01 февраля 2012

Вот образец модели у меня:

class Category(models.Model):
    name = models.CharField(max_length=128)


class Item(models.Model):
    name = models,CharField(max_lenght=128)
    category = models.ManyToManyField(Category, blank=True,
                                      related_name='item_category',
                                      null=True, through='ItemCategory')


class ItemCategory(models.Model):
    item = models.ForeignKey(Item)
    category = models.ForeignKey(Category)
    order = models.PositiveIntegerField(default=0, blank=True, null=True)

Моя проблема в том, как мне оформить заказ на стороне администратора? Другими словами, мне нужно расширить функциональность виджета, чтобы позволить пользователю изменять порядок выбранных элементов, и при сохранении формы выбранные элементы сохранят порядок элементов в ItemCategory.order. У меня есть форма, которая выглядит следующим образом:

class CategoryForm(forms.ModelForm):
    _items = forms.ModelMultipleChoiceField(
        required=True,
        label='Items',
        queryset=Items.objects.all(),
        widget=FilteredSelectMultiple(verbose_name="Items",
                                      is_stacked=False)
        )

    def __init__(self, *args, **kwargs):
        super(FamilyAdminForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Items

1 Ответ

0 голосов
/ 01 февраля 2012

Вы можете использовать Мета-класс:

class Category(models.Model): 
     # ...
     class Meta:
        ordering = ['name']
...