Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2016 21:32:54

pythonUser
Зарегистрирован: 2016-02-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает форма django???

Вся проблема в том, что в форме нужно сохранить внешние во фьюшке во время обработки формы.
Тоесть текстовые поля заполняем в форме на странице, а внешние ключи передаем во фьюшке и сохраняем…вылетает ошибка
ошибка __init__() got an unexpected keyword argument ‘user’… то же и с ‘good’

модель

class Reviews(models.Model):
user=models.ForeignKey(User)
good=models.ForeignKey(Good)
description=models.TextField(blank=True, verbose_name=u'Общее впечатление')
negative=models.CharField(max_length=100, blank=True, verbose_name=u'Недостатки')
positive=models.CharField(max_length=100, blank=True, verbose_name=u'Достоинства')
quantity_star=models.IntegerField(null=True, blank=True)
review_score=models.IntegerField(null=True, blank=True)
date_last_change=models.DateField(auto_now=True)
date_create=models.DateField(auto_now_add=True)

форма
class ReviewsForm(forms.ModelForm):
    
    def save(self, *args, **kwargs):
        good = kwargs.pop('good', None)
        user = kwargs.pop('user', None)
        inst = super(Reviews, self).save(*args, **kwargs)
        inst.good = good
        inst.user = user
        inst.save()
        return inst
    class Meta:
        model=Reviews
        fields=('positive', 'negative', 'description',)
        widgets={
            'positive':forms.TextInput(attrs={'id':'positive'}),
            'negative': forms.TextInput(attrs={'id': 'negative'}),
            'description': forms.TextInput(attrs={'id': 'description'}),
        }

фрагмент оработки фьюшки и передача аргументов

args['username']=auth.get_user(request)
args['good']=Good.objects.get(id=id_good)
form=ReviewsForm(request.POST, user=args['username'], good=args['good'])
        form.save()

Офлайн

#2 Май 27, 2016 07:17:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Почему не работает форма django???

Из инита лишнее нужно убрать до вызова супера, родительский класс ничего не знает о ваших дополнительных параметрах, но пытается их применить. Общий подход такой

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop("user")
        self.good = kwargs.pop("good")
        super(MyForm, self).__init__(*args, **kwargs)
 

или такой

class MyForm(forms.ModelForm):
    def __init__(self, *args, user = None, goods=None, **kwargs):
        self.user = user
        self.good = good
        super(MyForm, self).__init__(*args, **kwargs)
 



Офлайн

#3 Май 27, 2016 19:33:23

pythonUser
Зарегистрирован: 2016-02-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает форма django???

вылетает “Key Error” ‘user’

попробовал так исправить (добавил None), полная форма с методом save

class ReviewsForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop("user", None)
        self.good = kwargs.pop("good", None)
        super(ReviewsForm, self).__init__(*args, **kwargs)
    def save(self, *args, **kwargs):
        good = kwargs.pop('good', None)
        user = kwargs.pop('user', None)
        inst = super(Reviews, self).save(*args, **kwargs)# Вместо ReviewsForm подставить название класса
        inst.good = good
        inst.user = user
        inst.save()
        return inst

но тогда вылетает “super(type, obj): obj must be an instance or subtype of type”

Исправил в методе save в функции super на RewiesForm, стала вылетать ошибка

NOT NULL constraint failed: test_pattern_reviews.good_id

Я так понимаю, аргументы передаются, но не в save????


попрвил
def save(self, *args, **kwargs):
        inst = super(ReviewsForm, self).save(commit=False)
        inst.good = self.good
        inst.user = self.user
        inst.save()
        return inst

Все работает

Отредактировано pythonUser (Май 27, 2016 19:52:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version