【问题标题】:Django form - update boolean field to trueDjango 表单 - 将布尔字段更新为 true
【发布时间】:2020-09-18 12:54:18
【问题描述】:

我正在尝试更新一个布尔字段,但我遇到了这个问题:save() 得到了一个意外的关键字参数“update_fields”。

我遇到了不同的问题:一开始,当卖家填写表格时,它正在创建一个新渠道。我只想更新当前频道。

Logic= 消费者与卖家创建一个渠道(渠道不活跃)-> 如果卖家想要启动它。他有一种形式可以使它成为现实并启动它。

型号:

class Sugargroup(models.Model):
    consumer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="sugargroup_consumer", blank=True, null=True)
    seller = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="sugargroup_seller")
    is_active = models.BooleanField('Make it happen', default=False)
    slug = models.SlugField(editable=False, unique=True)

观看次数:

@method_decorator(login_required(login_url='/cooker/login'),name="dispatch")
class CheckoutDetail(generic.DetailView, FormMixin):
    model = Sugargroup
    context_object_name = 'sugargroup'
    template_name = 'checkout_detail.html'
    form_class = CreateSugarChatForm
    validation_form_class = LaunchSugargroupForm
    
    def get_context_data(self, **kwargs):
        context = super(CheckoutDetail, self).get_context_data(**kwargs)
        context['form'] = self.get_form()
        context['validation_form'] = self.get_form(self.validation_form_class) #self.validation_form_class()
        return context

    def form_valid(self, form):
        if form.is_valid():
            form.instance.sugargroup = self.object
            form.instance.user = self.request.user
            form.save()
            return super(CheckoutDetail, self).form_valid(form)
        else:
            return super(CheckoutDetail, self).form_invalid(form)
            
    def form_valide(self, validation_form):
        if validation_form.is_valid():
            validation_form.instance.sugargroup = self.object
            #validation_form.instance.seller = self.request.user
            validation_form.save(update_fields=["is_active"])
            return super(CheckoutDetail, self).form_valid(validation_form)
        else:
            return super(CheckoutDetail, self).form_invalid(validation_form)    

    def post(self,request,*args,**kwargs):
        self.object = self.get_object()
        form = self.get_form()
        validation_form = self.validation_form_class(request.POST) #validation_form = self.get_form(self.validation_form_class)
        if form.is_valid():
            return self.form_valid(form)
        elif validation_form.is_valid(): 
            return self.form_valide(validation_form)
        else:
            return self.form_valid(form)

    def get_success_url(self):
        return reverse('checkout:checkout_detail',kwargs={"slug":self.object.slug})

表格

class LaunchSugargroupForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super(LaunchSugargroupForm, self).__init__(*args,**kwargs)
        self.helper = FormHelper()
        self.helper.form_method="post"
        self.helper.layout = Layout(
            Field("is_active",css_class="single-input"),
            )
        
        self.helper.add_input(Submit('submit','Launch the channel',css_class="btn btn-primary single-input textinput textInput form-control"))

    class Meta:
        model = Sugargroup
        fields = [
            'is_active'
        ] 

   
    

【问题讨论】:

  • 什么LaunchSugargroupForm?
  • 我编辑帖子:)
  • ModelForms 的save 方法没有更新字段参数
  • @sayse 你知道我如何使用 LaunchSugargroupForm 实现它

标签: python django


【解决方案1】:

试试这个:

validation_form.is_active = True
validation_form.save() 

【讨论】:

  • 感谢您的评论,:( 页面重新加载,无需更改
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 2021-06-05
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多