Django: сохранение набора моделей формирует исключение из-за нарушения ограничения уникальности - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть такая модель (я буду вставлять только соответствующие данные):

class Chart(BaseModel):
    name = models.CharField(max_length=255, null=False, blank=False)
    order = models.PositiveSmallIntegerField(blank=False, null=False, default=0)
    data_type = models.CharField(max_length=3, null=False, blank=False)
    # one data_type will be repeated in many instances of the model

    class Meta:
        unique_together = (('order', 'data_type'), )

Когда у меня несколько диаграмм с определенным data_type, попытка изменить их порядок вручную становится большойтрата времени, поэтому я решил использовать модельный набор, позволяющий пользователю изменять только order.Однако когда я сохраняю набор форм модели, возникает исключение, так как ограничение unique_together нарушается.

Вот набор форм, который я использую:

class ChartOrderForm(forms.ModelForm):
    name = forms.CharField(disabled=True)

    class Meta:
        model = Chart
        fields = ['name', 'order']


ChartOrderFormSet = forms.modelformset_factory(
    Chart,
    form=ChartOrderForm,
    extra=0,
)

А вот метод, который я использую для их сохранения:

@login_required
def charts_reorder(request):
    if request.method == 'POST':
        formset = ChartOrderFormSet(request.POST)
        if formset.is_valid():
            formset.save()

Есть ли способ сохранить их безНарушение ограничения, которое не изменяет заказы несколько раз, или удаление всех экземпляров из БД и повторное создание их с другим порядком?

...