#python #django #database
Вопрос:
Я новичок в Джанго и нуждаюсь в некоторой помощи.
Я в основном пытаюсь создать похожее на Tinder приложение для фильмов с использованием Django и работаю над основами функциональности «прокрутки». И, используя форму, у меня возникают проблемы с вводом свайпа. Мне нужно только логическое значение от пользователя (true для » да «и false для «нет»), чтобы оно обновлялось в соответствии с идентификатором фильма в базе данных. Но я не могу выполнить это обновление. Вместо этого моя форма добавляет новую запись.
Возможно , более простой альтернативой было бы полностью удалить поле swipes из модели, просто использовать его в качестве переменной и вести список фильмов, в которых эта переменная была выбрана как истинная. В этом случае мне не удалось получить доступ к идентификатору фильма, поэтому это тоже не удалось ;-;
Как мне заставить это работать простым и эффективным способом?
Вот что мое models.py похоже на:
class Movie(models.Model): movie_name = models.CharField(max_length=300) # unique id for room movie_description = models.TextField(default='') movie_genre = models.CharField(max_length=100) movie_date_released = models.DateField(null=True) movie_swiped = models.BooleanField(default = False) # Override the __str__ method to return the firstname and lastname def __str__(self): return self.movie_name def is_exists(self): ''' Check whether a user exists in the database ''' if Movie.objects.get(movie_name=self.movie_name): return True else: return False
views.py
# Create your views here. class RoomSwipeView(APIView): # Define a class variables serializer_class = MovieSerializer queryset = [] swiped_movies=[] def get(self, request): # Get the room id from the request movie_id = request.GET.get('id') if movie_id: queryset = Movie.objects.filter(id=movie_id) else: queryset = Movie.objects.all() print(queryset) print("BRUHHHH") form = MovieSwipeForm return render(request,'swipe.html',{'details':queryset, 'form':form}) def post(self, request): form = MovieSwipeForm(request.POST) submitted = False if request.method == "POST": if form.is_valid(): print("Getting here!!!!!!!") swiped = form.save(commit=False) if(swiped.movie_swiped): swiped_movies.push(swiped) print(swiped_movies) else: form = MovieSwipeForm if 'submitted' in request.GET: submitted = True return render(request,'swipe.html',{'details':queryset, 'form':form,'submitted':submitted})
Другая проблема в этом файле заключается в том, что swiped_movies
queryset
переменные класса и недоступны для метода post, и это также приводит к ошибке.
swipe.html
lt;htmlgt; lt;bodygt; lt;h1gt; Movie Detailslt;/h1gt; {% for obj in details %} {{obj.movie_name}}lt;br/gt; Description: {{obj.movie_description}}lt;br/gt; Genre: {{obj.movie_genre}}lt;br/gt; Date Released: {{obj.movie_date_released}}lt;br/gt; lt;!-- lt;button type="button"gt;YESlt;/buttongt; lt;button type="button"gt;NOlt;/buttongt; --gt; {% if submitted %} Success {% else %} lt;form action="" method="post"gt; {% csrf_token %} {{ form.as_p }} lt;input type="submit" value="Submit"gt; lt;!-- lt;input type="submit" value="NO"gt; --gt; lt;/formgt; {% endif %} lt;br/gt;lt;br/gt; {% endfor %} lt;/bodygt; lt;/htmlgt;
forms.py
class MovieSwipeForm(ModelForm): class Meta: model = Movie fields = ('movie_swiped',)
Комментарии:
1. пожалуйста, объясните, как вы пытаетесь пометить фильмы как прокрученные , также нет переменной с именем
movies_swiped
2. Ой, опечатка. Я хотел сказать
swiped_movies
. Исправил это
Ответ №1:
Вам нужно передать экземпляр объекта movie, который вы хотите обновить, чтобы сформировать при запуске формы, таким образом, объект существования будет обновлен, в противном случае form.save() создаст вместо него новый объект
В view.py
Instance = Movie.objects.get(id=movie_id) form = MovieSwipeForm(request.POST, instance=instance)
Чтобы получить доступ к параметрам класса в классе, вам нужно вызвать их self.parameter, поэтому для доступа к набору запросов в методе post используйте self.набор запросов