[英]How to update a record in a Django model using forms?
我是 Django 的新手,需要一些幫助。
我基本上是在嘗試使用 Django 為電影構建一個類似 Tinder 的應用程序,並研究“滑動”功能的基礎知識。 而且,在使用表單時,我無法獲取滑動輸入。 我只想要來自用戶的布爾值(true 表示是,false 表示否),並根據數據庫中的電影 id 進行更新。 但我無法執行此更新。 我的表單添加了一條新記錄。
也許更簡單的替代方法是從模型中完全刪除 swipes 字段,只需將其用作變量並維護一個電影列表,其中該變量被選擇為真。 在這種情況下我無法訪問電影 ID,所以這也失敗了;-;
我如何以簡單有效的方式使其工作?
這是我的 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
視圖.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})
此文件中的另一個問題是 post 方法未訪問swiped_movies
和queryset
類變量,這也會引發錯誤。
刷卡.html
<html>
<body>
<h1> Movie Details</h1>
{% for obj in details %}
{{obj.movie_name}}<br/>
Description: {{obj.movie_description}}<br/>
Genre: {{obj.movie_genre}}<br/>
Date Released: {{obj.movie_date_released}}<br/>
<!-- <button type="button">YES</button>
<button type="button">NO</button> -->
{% if submitted %}
Success
{% else %}
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
<!-- <input type="submit" value="NO"> -->
</form>
{% endif %}
<br/><br/>
{% endfor %}
</body>
</html>
表格.py
class MovieSwipeForm(ModelForm):
class Meta:
model = Movie
fields = ('movie_swiped',)
您需要在啟動表單時將要更新它的電影對象的實例傳遞給表單,從而更新一個存在對象,否則 form.save() 將創建新對象
在視圖.py
Instance = Movie.objects.get(id=movie_id)
form = MovieSwipeForm(request.POST, instance=instance)
要訪問類中的類參數,您需要調用它們 self.parameter 以便在 post 方法中訪問 queryset 使用 self.queryset
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.