Ошибка в modelformset_factory: соответствующий запрос не существует

У меня есть эти 3 модели:

class Service(models.Model):
    name = models.CharField(max_length=30L, blank=True) 


class ServiceUser(models.Model):
    service = models.ForeignKey(Service, null=False, blank=False)
    contact = models.ForeignKey(Contact, null=False, blank=False) 


class SupplierPrice(models.Model):
    service_user = models.ForeignKey('ServiceUser') 
    price_type = models.IntegerField(choices=PRICE_TYPES) 
    price = models.DecimalField(max_digits=10, decimal_places=4)

Я хочу создать modelformset_factory с SupplierPrice в качестве модели.

Modelformset_factory отлично работает с моделями Service и ServiceUser. Но если я сделаю:

>>> prices = SupplierPrice.objects.filter(service_user = srvuser)

который представляет собой набор запросов, который возвращает два объекта SupplierPrice и:

>>> SupplierPriceFormSet = modelformset_factory(SupplierPrice)
>>> pricesformset = SupplierPriceFormSet(queryset=prices)
>>> pricesformset.as_p()

Он возвращает ошибку DoesNotExist: запрос соответствия службы не существует. Я, должно быть, что-то неправильно понял, но что?


person Emilio Conte    schedule 30.11.2014    source источник
comment
Можете ли вы показать, как вы объявляете SupplierPriceFormSet? Ваш код выше показывает ServiceUserFormSet для другой модели.   -  person Peter DeGlopper    schedule 30.11.2014
comment
правильно! Я только что отредактировал сообщение с правильной строкой.   -  person Emilio Conte    schedule 30.11.2014
comment
Тогда я не вижу ничего явно плохого. Исключение подразумевает, что он ищет экземпляр Service — возможно ли, что один из ваших экземпляров ServiceUser имеет FK для несуществующего Service, скажем, потому, что вы используете устаревшую базу данных или базу данных, которая не применяет ограничения FK? Полный текст исключения тоже может помочь.   -  person Peter DeGlopper    schedule 30.11.2014
comment
Я смотрю в своей базе данных MySql, чтобы увидеть, что не так. FK четко не определен в MySQL, так как я использую уже существующую БД для своего проекта.   -  person Emilio Conte    schedule 01.12.2014
comment
@PeterDeGlopper Это было, как вы думали, какое-то безумие в БД. Но я действительно удивлен временем, которое требуется для создания набора форм, поскольку в нем всего две строки. У вас есть идея о том, что не так с этим?   -  person Emilio Conte    schedule 01.12.2014
comment
Использует ли ваш класс ServiceUser свой атрибут службы в своем представлении Unicode? Набор форм будет иметь виджет выбора, позволяющий вам изменить, для какого пользователя предназначена цена, со всеми известными пользователями в качестве вариантов, поэтому, если кому-то из них нужна отсутствующая служба для создания метки, вы увидите это исключение.   -  person Peter DeGlopper    schedule 01.12.2014
comment
Спасибо, я проверю это завтра.   -  person Emilio Conte    schedule 01.12.2014


Ответы (1)


Это исключение возникает из-за некоторых ошибок в ссылочной целостности моей БД. Сначала мне пришлось очистить его, чтобы модель modelformset_factory заработала.

Спасибо Питеру ДеГлопперу! После этого медлительность рендеринга modelform_factory возникла из-за слишком сложного метода модели Unicode.

person Emilio Conte    schedule 01.12.2014