我已经找了好几天而且我无法解决这个问题,所以这是我的问题:
我现在尝试在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}}
答案 0 :(得分:0)
def form_valid(self, form):
form.instance.owner = self.request.user
return super(ProductCreate, self).form_valid(form)
覆盖上述form_valid
的{{1}}方法