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