Как я могу заполнить поле с текущим пользователем в форме, используя CreateView / UpdateView в Django? - PullRequest
0 голосов
/ 18 мая 2018

Я искал это в течение нескольких дней и не мог ее решить, поэтому вот моя проблема:

Я сейчас пытаюсь создать продукт, используя только 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 %}

1 Ответ

0 голосов
/ 18 мая 2018
def form_valid(self, form):
    form.instance.owner = self.request.user
    return super(ProductCreate, self).form_valid(form)

переопределить form_valid метод CreateView, как указано выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...