预填充generec createview

问题描述

我希望表单预先填充数据

我的模型:

TYPE = (("S",'Swing'),("R","Rapide"))
class valuation(models.Model):
    stock = models.ForeignKey("stock",on_delete=models.CASCADE,related_name='valuation',)
    date = models.DateField(auto_created=True)
    val_type = models.CharField(choices=TYPE,max_length=1,default='R')
    user = models.ForeignKey("users.User",on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.stock} - {self.date} - {self.val_type}"

我的观点:

class valuationCreateviewSwing(CreateView):
    template_name = "evaluation/evaluation_create.html"
    form_class = valuationModeform

    def get_form_kwargs(self): # prepopulate form
        kwargs = super(valuationCreateviewSwing,self).get_form_kwargs()
        stck = get_object_or_404(stock,pk=self.kwargs['pk'])
        kwargs['user'] = self.request.user
        kwargs['val_type'] = "S"
        kwargs['stock'] = stck
        return kwargs

    def get_context_data(self,**kwargs):
        # we need to overwrite get_context_data
        # to make sure that our formset is rendered
        data = super().get_context_data(**kwargs)
        if self.request.POST:
            data["val_detail"] = ChildFormset1(self.request.POST)
        else:
            data["val_detail"] = ChildFormset1()
        data.update({
            "typeVal": "Swing",})
        return data

    def form_valid(self,form):
        context = self.get_context_data()
        val_detail_Swing = context["val_detail_Swing"]
        self.object = form.save(commit=False)
        # add data info neede about valuation model
        self.object = form.save()
        if val_detail_Swing.is_valid():
            val_detail_Swing.instance = self.object
            val_detail_Swing.save()
        return super().form_valid(form)

    def get_success_url(self):
        return reverse("stock:stock-list")

在我看来,我有一个子表单(这部分工作正常):

ChildFormset1 = inlineformset_factory(
    valuation,val_detail_Swing,form=valuationSwingModelform,can_delete=False)

我尝试使用 ge_for_kwargs 但它似乎不起作用,因为我收到一条错误消息: init() 得到了一个意外的关键字参数 'user'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)