Как получить текущего пользователя Django и вставить его в запись в БД - PullRequest
0 голосов
/ 22 ноября 2018

Вопрос закрыт : См. Ответ, опубликованный Alasdair для решения.

Я добавляю экземпляры Pets в таблицу:

class Pet(models.Model):
   petName = models.CharField(max_length=100, default='My Pet')
   petImage = models.ImageField(default='default.png', blank=True)
   author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)

Код вышехорошо, однако «Пользователь» в последней строке дает мне всех пользователей, когда-либо зарегистрированных в моем приложении в раскрывающемся меню (при просмотре в виде формы).Я хочу, чтобы автор (то есть пользователь, который вошел в систему) автоматически ассоциировался с этим новым объектом pet.

Я не знаю все входы и выходы встроенной базы данных auth_user, поэтому я не знаю, как ссылаться это конкретный экземпляр пользователя, то есть тот, кто вошел в систему. Я знаю, что request.user на других страницах возвращает пользователя, вошедшего в систему, я просто не знаю, как передать эту переменную в эту модель.Есть идеи?

* ОБНОВЛЕНИЕ: Включены views.py *

@login_required(login_url="/accounts/login/")
def add_pet(request):
    if request.method == 'POST':
        form = forms.AddPet(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
            return redirect('yourPet')
    else:
        form = forms.AddPet()
    return render(request, 'records/pet_create.html', {'form': form},)

1 Ответ

0 голосов
/ 22 ноября 2018

Сначала отредактируйте форму вашей модели, чтобы удалить поле author.

class AddPet(forms.ModelForm):
    class Meta:
        model = Pet
        fields = ['petName', 'petImage']  # leave out author

Затем, по вашему мнению, вы можете установить instance.author на request.user перед сохранением экземпляра.

if request.method == 'POST':
    form = forms.AddPet(request.POST, request.FILES)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.author = request.user
        instance.save()
        return redirect('yourPet')

Последний шаг - рассмотреть случай, когда пользователь не вошел в систему, но вы уже рассмотрели это с помощью декоратора login_required.

...