Как заполнить поле «updated_by» моей модели Django автоматически с помощью набора форм? - PullRequest
0 голосов
/ 30 мая 2020

Я новичок с Django и до сих пор наслаждаюсь этим. Я понял, как использовать наборы форм модели, но не могу понять, как сделать так, чтобы моя форма автоматически использовала зарегистрированного пользователя в качестве поля «updated_by».

models.py

class Inventory(models.Model):
    item = models.CharField(max_length=50, unique=True)
    stock = models.IntegerField()
    par = models.IntegerField()
    date_updated = models.DateTimeField(auto_now=True)
    updated_by = models.ForeignKey(User, on_delete=models.PROTECT)

    def __str__(self):
        return self.item

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    phone = PhoneField(blank='True', help_text='Contact Phone Number')

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self):
        super().save()

Ответы [ 3 ]

0 голосов
/ 31 мая 2020

я думаю, вам следовало создать форму для инвентаризации, если да (пусть InvntoryForm), чем в файле view.py вы сделали что-то вроде этого: -

    if request.method == 'POST':
      Inven_form=InventoryForm(data=request.POST)

       if Inven_form.is_valid():
           user=Inven_form.save()
           #in between add this
           Inven_form.updated_by=request.user.username
           user.save()
0 голосов
/ 31 мая 2020

Я бы использовал аргумент commit = False, который создаст новый объект и назначит его без сохранения в вашей базе данных. Затем вы можете установить атрибут пользователя и вызвать save () без аргументов.

Например, вот как я назначил атрибут пользователя своему приложению блога.

в views.py

if form.is_valid():
            # Create a new entry and assign to new_article.
            new_article = form.save(commit=False)

            # Set the new article attribute to the current user.
            new_article.user = request.user

            # Save to database now the object has all the required data.
            new_article.save()

Вот полный код представления add_article, если это помогает.

@login_required
def add_article(request):
    """ Add a new article. """
    if request.method != 'POST':
        # No data submitted, create a blank form.
        form = AddArticleForm()
    else:
        # POST data submitted, process data.
        form = AddArticleForm(request.POST, request.FILES)
        if form.is_valid():
            new_article = form.save(commit=False)
            new_article.author = request.user
            new_article.save()
            return back_to_blog_page()

    context = {'form': form}
    return render(request, 'add_article.html', context)
0 голосов
/ 30 мая 2020

Думаю, проблема в вашем views.py. Перед сохранением формы попробуйте получить request.user.

...