Форум сайта python.su
0
Вся проблема в том, что в форме нужно сохранить внешние во фьюшке во время обработки формы.
Тоесть текстовые поля заполняем в форме на странице, а внешние ключи передаем во фьюшке и сохраняем…вылетает ошибка
ошибка __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()
Офлайн
568
Из инита лишнее нужно убрать до вызова супера, родительский класс ничего не знает о ваших дополнительных параметрах, но пытается их применить. Общий подход такой
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)
Офлайн
0
вылетает “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
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)
Офлайн