如何使用Django中的CreateView / UpdateView在表单中填写当前用户的字段?

时间:2018-05-18 19:57:20

标签: python django django-models django-forms django-views

我已经找了好几天而且我无法解决这个问题,所以这是我的问题:

我现在尝试在views.py中使用CreateView创建一个产品(我的想法是创建表单并将所有内容传递给views.py中的函数),但是有一个字段我想要它自动填写已登录用户('所有者')。我现在尝试在createView中使用views.py,但它不起作用。

我想说这实际上它创建了一个表单,我必须填写所有字段并且它工作正常,但我想自动填充所有者'当前用户登录的字段。

现在我试图像前面所说的那样使用get_initial,但似乎它不起作用。我也尝试了很多我在这里看过的东西,在stackoverflow中,但是其中任何一个都适合我。

我在这里列出了所有相关代码,但如果您还需要其他任何代码,请提出要求,我会将其上传。

这是我的# view for the product entry page class ProductCreate(CreateView): model = Product fields = ['owner', 'category', 'tag', 'name', 'content_tweet'] success_url = reverse_lazy('index') def get_form(self, form_class=None): form = super(ProductCreate, self).get_form(form_class) return form def get_initial(self): return { 'owner': self.request.user, } def dispatch(self, request, *args, **kwargs): if not request.user.is_superuser or request.user.is_vendor: raise PermissionDenied() return super().dispatch(request, *args, **kwargs)

models.py

这是我在class Product(models.Model): owner = models.ForeignKey(CustomUser, on_delete=models.PROTECT) name = models.CharField(_('Product Name'), max_length=150) category = models.ManyToManyField(Category) tag = models.ManyToManyField(Tag) content_tweet = models.CharField(_('Content Tweet'), max_length=150, blank=True) content_abstract = models.CharField(_('Content Abstract'), max_length=3000, blank=True) canvas_1 = models.FileField(upload_to='documents/canvas_1/', blank=True) price_tweet = models.IntegerField(_('Tweet Price in Tokens'), default=0) price_abstract = models.IntegerField(_('Abstract Price in Tokens'), default=50) price_canvas_1 = models.IntegerField(_('Canvas 1 Price in Tokens'), default=500) it_exist = models.BooleanField(_('is an existing idea?'), default=False) is_active = models.BooleanField( _('active'), default=True, help_text=_( 'Designates whether this product should be treated as active. ' 'Unselect this instead of deleting products.' ), ) history = HistoricalRecords() class Meta: unique_together = ('name', 'owner') def get_categories(self): return ",".join([str(p) for p in self.category.all()]) def get_tags(self): return ",".join([str(p) for p in self.tag.all()]) def __str__(self): return self.name 中使用的模型:

XX.html

这是我在{% for field in form %} <div class="form-group"> <div > <span class="text-danger la">{{ field.errors }}</span> </div> <label >{{ field.label_tag }}</label> <div class="col-sm-10">{{ field }}</div> </div> {% endfor %} 中使用(现在)的模板:

{{1}}

1 个答案:

答案 0 :(得分:0)

def form_valid(self, form):
    form.instance.owner = self.request.user
    return super(ProductCreate, self).form_valid(form)

覆盖上述form_valid的{​​{1}}方法