#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). Нет проблем с сохранением в этой функции