Я искал это в течение нескольких дней и не мог ее решить, поэтому вот моя проблема:
Я сейчас пытаюсь создать продукт, используя только CreateView в views.py(Моя идея - создавать формы и передавать все в функцию в views.py), но есть одно поле, в котором я хочу, чтобы оно автоматически заполнялось зарегистрированным пользователем ('owner').Я пытался использовать get_initial
в createView на данный момент, но он не работает.
Я хочу сказать, что это на самом деле создает форму, в которой я должен заполнить все поля, и этоработает нормально, но я хочу автоматически заполнить поле 'owner' текущим пользователем, вошедшим в систему.
Пока я пытался использовать get_initial, как я уже говорил, но, похоже, он не работает.Я также перепробовал много вещей, которые видел здесь, в stackoverflow, но любая из них сработала для меня.
Здесь я поместил весь соответствующий код, но если вам нужно что-нибудь еще, пожалуйста, попросите его иЯ загружу его.
Это моя views.py
:
# 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 %}