Извлечение текущего идентификатора пользователя внутри функции, определенной в классе (CreateView)

#python #django #sqlite #model

#python #django #sqlite #Модель

Вопрос:

Возможно ли получить текущий зарегистрированный идентификатор пользователя в функцию, определенную внутри класса, в views.py , используя Django CreateView?

Что-то вроде этого:

 class CreationClass(CreateView):
    model = Mymodel
    def creation(self, request):
        if request.method == 'POST':
            form = MyForm(request.POST or None)
            if form.is_valid:
                 form = myForm()
                 user_id = self.request.user.id
                 rel_table = Item_id_user ( item_id = form.id, user_id = request.user.id)
                 rel_table.save() #<--- this does not save, even if table exists
        return render(request, ''mypage.html')
        

 

И это мой models.py

 class Item(models.Model):

     id_user = models.ManyToManyField(User, related_name='user_item', 
               verbose_name='id utente', through='Item_id_user')
     object = models.Manager()

     # table to handle relationship
class Item_id_user(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    id = models.IntegerField(primary_key=True)

 

Чего я хочу добиться, так это сохранить в Item_id_user, но вообще ничего не сохраняется. Я думал, что проблема в request.user.id .

Комментарии:

1. Хорошо, это был не мой вопрос. В любом случае, если я напечатаю user_id в своем терминале, я не увижу значение… я думал, что в том, что я написал, есть ошибка…

2. Да, я заметил и удалил свой ответ позже. Вы можете использовать его, как в приведенном вами примере. Если self.request или self.request.user недоступны, будет вызвано исключение.

Ответ №1:

вместо:

 user_id = self.request.user.id
 

попробуйте это:

 user_id = request.user.id
 

Должно работать.

Комментарии:

1. Это немного странно, я добавлю остальную часть своего кода, потому что это не работает

2. Попробуйте это в строке 9: rel_table = Item_id_user ( item_id = form.id , user_id = запрос.user)

Ответ №2:

Я не понимаю, почему вы повторно инициализируете форму с помощью form = MyForm() после проверки формы. Я думаю, что это может привести к удалению содержащихся в нем данных. Похоже, вы забыли его там.

Попробуйте это:

 class CreationClass(CreateView):
model = Mymodel
def creation(self, request):
    if request.method == 'POST':
        form = ColumnCreationForm(request.POST or None)
        if form.is_valid:
             # form = myForm()
             user_id = self.request.user.id
             rel_table = Item_id_user ( item_id = form.id, user_id = request.user.id)
             rel_table.save() #<--- this does not save, even if table exists
    return render(request, ''mypage.html')
 

Комментарии:

1. вы правы, мой плохой … но это не решило мою проблему… в другой функции я делаю то же самое для сохранения в другой таблице отношений (я использую m2m). Нет проблем с сохранением в этой функции