python - 如何使用表单更新 Django 模型中的记录?
问题描述
我是 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
推荐阅读
- react-native - 世博会 Firebase 电话身份验证失败
- c++ - 如何在 C++ 中将字符串转换为数组?
- ios - 自动更新在swift中的应用程序购买中不起作用
- asp.net - asp.net PageMethods(web method) 会触发回发吗?
- c++ - VS Code - 调试测试 - vscode.console
- excel - 为什么 Application.CommandBars("Standard").Controls("&Undo") 在特定工作表中被禁用?
- assembly - 为什么使用 MSB 作为符号位?
- delphi - IIS 托管 RAD 服务器向另一台服务器发送请求
- c# - 为什么我对 ASP.NET Telerik RadGrid 列的排序不起作用?单击列标题时清除 RadGrid 并且行消失
- r - 使用 ggplot & data wrangling 重现绘图