Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2016 23:27:05

python_egg
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

CBV, ModelForm, exclude

Всем привет, направьте на верный путь, видимо уже запутался.

У меня есть модель

 class PortalUser(AbstractBaseUser, PermissionsMixin):
    pass
    #some fields
есть:

 class PortalUserProducts(models.Model):
    portal_user_product_owner = models.ForeignKey(PortalUser)
    #other_fields....

есть форма:
 class PortalUserProductsForm(forms.ModelForm):
    class Meta:
        model = PortalUserProducts
        fields = '__all__'
        exclude = [
            'portal_user_product_owner',
        ]

И есть такая вьюха:
 class AddPortalUserProducts(CreateView):
    form_class = PortalUserProductsForm
    template_name = 'addproduct.html'
    success_url = '/profile/'
    '''# Disabled method
    def get_form_kwargs(self):
        kwargs = {'initial': self.get_initial()}
        if self.request.method in ('POST', 'PUT'):
            kwargs.update({
                'portal_user_product_owner': self.request.POST,
                #'files': self.request.FILES,
            })
        return kwargs'''
    def get_initial(self):
        return {'portal_user_product_owner': self.request.user}
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(AddPortalUserProducts, self).dispatch(*args, **kwargs)
    def get_object(self, queryset=None):
        return self.request.user

Если в форме делать exclude поле portal_user_product_owner, как тут и указано выше, то джанга закономерно ругается следующим матом: null value in column “portal_user_product_owner_id” violates not-null constraint
Если же поле не исключать, то появляется CHOICE_FIELD со всеми пользователями на выбор.

Подскажите, как сделать так, чтобы:
1) поле выбора пользователя было не доступно, собственно пользователям, но см. след пункт
2) оно автоматически подставлялось при сохранении данных формы.
??

спасибо

Офлайн

#2 Июль 17, 2016 22:42:28

python_egg
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

CBV, ModelForm, exclude

Разобрался

 def form_valid(self, form):
        form.instance.portal_user_product_owner = self.request.user
        return super(AddPortalUserProducts, self).form_valid(form)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version