Невозможно присвоить «0.0»: «Item.discount» должен быть экземпляром «Скидка»

Я знаю, что здесь есть масса подобных вопросов, но это другое, так как похоже, что это ошибка.

Модель:

class Item(BaseModel):
    serial = AutoField(primary_key=True)
    prod = ForeignKey(Product, verbose_name='Product')
    account = ForeignKey(Account, verbose_name='Account')
    pdate = DateField(null=True, verbose_name='Date') # Paid date, for imported licenses only
    price = DecimalField(max_digits=10, decimal_places=2, default=0)
    discount = FloatField(default=0.0)
    vat = ForeignKey(Vat, null=True) # Null is for imported licenses
    disabled = BooleanField(default=False) # To activate/deactivate license

class Discount(BaseModel):
    ID = AutoField(primary_key=True)
    name = CharField(max_length=32)
    rate = FloatField(verbose_name='Rate (%)', help_text=get_help('discount__rate'))
    disabled = BooleanField(default=False)
    def __unicode__(self):
        return u'%s, %s%'%(self.name, self.rate)

Форма:

class InvAddProdForm(ModelForm):
    qty = IntegerField(initial=1)
    class Meta:
        model = Item
        fields = ('prod','account','discount','vat')
    def __init__(self, *args, **kwargs):
        super(InvAddProdForm, self).__init__(*args, **kwargs)
        self.fields['prod'].empty_label = None
        self.fields['prod'].queryset = Product.objects.filter(disabled=False).order_by('name')
        self.fields['account'].empty_label = None
        self.fields['vat'].empty_label = 'AUTO'
        self.fields['vat'].required = False
        self.fields['vat'].queryset = Vat.objects.filter(disabled=False).order_by('name')

Как вы можете видеть, класс Скидка существует, но Item никогда не использует его, и все же, когда я пытаюсь создать экземпляр InvAddProdForm, я получаю исключение

ValueError at /invoice/10000/
Cannot assign "0.0": "Item.discount" must be a "Discount" instance.

Может ли кто-нибудь понять это? Я нахожу это очень своеобразным. Если поле скидок в Item было поле ForeignKey, это имело бы смысл для меня, но это не так! Это FloatField

0
добавлено
Просмотры: 1
Чтобы добавить к этому: таблица базы данных имеет столбец дисконта как поле «двойное», поэтому база данных кажется правильной
добавлено автор Eldamir, источник
Кроме того, он работал, и теперь это не происходит после очистки базы данных
добавлено автор Eldamir, источник
Я подумал об этом, но я не понимаю, как он работал до этого. Я отдам это, хотя
добавлено автор Eldamir, источник
Просто некоторые поля даты и другие флаги ... Ничего, что содержит слово скидка. BaseModel наследует от models.Model, тогда как Item наследует от BaseModel
добавлено автор Eldamir, источник
Как выглядит ваша модель BaseModel?
добавлено автор Density 21.5, источник
Я думаю, проблема в том, что у вас есть дисконтная fload и связанный набор объектов Discount. попробуйте изменить название расстояния floatfield на что-то еще и посмотреть, работает ли оно
добавлено автор YardenST, источник

1 ответы

Эта

discount = FloatField(default=0.0)

должно быть

discount = ForeignKey (Скидка)

<�Сильный> Обновление

Ok so what has probably happened is that your models.py is out of sync with what your database schema looks like. Presumably, you have changed it from a foreign key to a float field. So you need to change Этаin the db as well. There are 2 ways you can do this:

  1. Drop the table and run syncdb again
  2. Use South

P.S Вероятно, вы должны сохранить discount как десятичное поле

3
добавлено
Я понимаю, что это то, что думает Django, но я хочу, чтобы это просто поле с плавающей точкой, поскольку оно не имеет никакого отношения к классу скидок
добавлено автор Eldamir, источник
Обновление вашего ответа было правдой. Раньше он работал, и ничего не изменилось, кроме наследования. Юг использовался для переноса этого изменения, но по какой-то причине он его испортил. Я изменил имя поля floatfield на «диск» вместо «скидки» и снова перенаправил, что решило проблему. Я думаю, что на юге есть проблема с его соглашением об именах, когда дело доходит до наследования классов
добавлено автор Eldamir, источник