我正试图使网页应用程序,其中有主页面上的 Jmeter 板,用户可以添加保存的链接,笔记提醒等,我想出了如何使用在同一视图中创建不同的模型对象的几种形式,但是我不能更新那些对象。我特别想做的是有一个按钮窗体,当用户点击那个按钮时(复选框)提醒对象状态更改为已关闭。但我无法找到获取该对象ID的方法或在视图中查询它的任何内容。
我对Django框架非常陌生,这可能是显而易见的,但我找不到任何可以帮助我的信息,我尝试了很多变体来实现这一点,但到目前为止没有任何效果。
型号.py
class Reminders(models.Model):
person_id = models.ForeignKey(Person, related_name="reminder_about", null=True, blank=True, on_delete=models.CASCADE)
date = models.DateTimeField(null=True)
status = models.CharField(max_length=150, null=True, blank=True)
note = models.CharField(max_length=150, null=True, blank=True)
user_id = models.ForeignKey(Person, related_name="reminder_for", null=True, blank=True, on_delete=models.CASCADE)
class Meta:
verbose_name = 'Reminder'
verbose_name_plural = 'Reminders'
def __str__(self):
return f"{self.status} {self.note}"
查看次数.py
@login_required
def index(request):
current_user = request.user
person = Person.objects.get(user=current_user)
scheduled_calls = ScheduledCalls.objects.filter(user_id=person.id).order_by("-date")
reminders = Reminders.objects.filter(user_id=person.id).order_by("-date")
notes = Notes.objects.filter(user_id=person.id).order_by("-date")
links = SavedLinks.objects.filter(user_id = person.id)
if request.method == "POST":
call_form = _get_form(request, CallForm, "call_form_pre")
link_form = _get_form(request, LinkForm, "link_form_pre")
note_form = _get_form(request, NotesForm, "note_form_pre")
reminder_form = _get_form(request, RemindersForm, "reminder_form_pre")
remindercheck_form = _get_form(request, RemindersForm, "remindercheck_form_pre")
if call_form.is_bound and call_form.is_valid():
call_form.instance.user_id = person
call_form.save(commit=False)
call_form.save()
return redirect("home")
if link_form.is_bound and link_form.is_valid():
link_form.instance.user_id = person
link_form.save(commit=False)
link_form.save()
return redirect("home")
if note_form.is_bound and note_form.is_valid():
note_form.instance.user_id = person
note_form.save(commit=False)
note_form.save()
return redirect("home")
if reminder_form.is_bound and reminder_form.is_valid():
reminder_form.instance.user_id = person
reminder_form.save(commit=False)
reminder_form.save()
return redirect("home")
#this is the part im stuck with
if remindercheck_form.is_bound:
note = request.POST("note")
reminder = Reminders.objects.filter(note=note)
reminder.update(status="Closed")
return render(request, "main/home.html", {"person" : person,
"scheduled_calls" : scheduled_calls,
"reminders" : reminders,
"notes" : notes,
"links" : links,
"call_form" : CallForm(prefix = "call_form_pre"),
"link_form" : LinkForm(prefix = "link_form_pre"),
"note_form" : NotesForm(prefix = "note_form_pre"),
"reminder_form" : RemindersForm(prefix = "reminder_form_pre"),
"remindercheck_form" : RemindersForm(prefix = "remindercheck_form_pre"),
})
超文本标记语言
<div id="tabs" style="overflow-y:scroll; height:14rem;">
{% if reminders %}
{% for reminder in reminders %}
<div class="d-flex align-items-center p-0 my-1">
<form action="" method="POST">
{% csrf_token %}
<div class="form-check">
<input id="remdone" name="{{remindercheck_form.prefix}}" class="form-check-input" type="checkbox" value="False">
<input class="form-check-label" style="border: 0px; background-color: white; color: black;" name="note"
value="{{reminder.note}}" disabled>
<input name="status" type="text" class="form-control" value="Closed" hidden>
</div>
</form>
<script type='text/javascript'>
$(document).ready(function() {
$('input[id=remdone]').change(function(){
$('form').submit();
});
});
</script>
</div>
{% endfor %}
{% else %}
<h5 class="text-center mt-5">You did a good job! No reminders left!</h5>
{% endif %}
</div>
表单.py
class RemindersForm(forms.ModelForm):
class Meta:
model = Reminders
fields = ("note", "person_id", "status")
widgets = {
"person_id" : forms.Select(attrs={'class': 'form-control'}),
"note" : forms.TextInput(attrs={'class': 'form-control'}),
"status" : forms.TextInput(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
super(RemindersForm, self).__init__(*args, **kwargs)
self.fields['person_id'].empty_label = " "
self.fields['person_id'].queryset = Person.objects.all()
编辑
为了更清楚地添加它在前端的外观。当用户点击复选框项目在数据库中的状态应更改为关闭和项目应dissappear从列表中。
3条答案
按热度按时间2sbarzqh1#
首先,你应该注意models.py文件,你使用的是Person模型,我看不到,但它似乎是一个用户自定义的模型。
您不需要为每个提醒添加id,因此您可以像这样重新编码models.py:
型号.py
然后在你的
view.py
文件中你需要更干净的代码,并使用user对象来填充另一个模型中的外键。另外,如果你想更新你的
views.py
文件中的每个模型,请查询数据库并使用update()
方法,如下所示:查看次数.py
对于端点,通常django开发人员定义一个变量并将其命名为
context
:l7wslrjt2#
您可以通过将提醒ID作为表单中的隐藏输入字段传递给表单来解决它。然后,在您的视图中,您可以根据ID检索提醒对象并更新其状态。我确实有同样的问题,之前我使用此技术进行了修复。这样,当用户单击复选框时,表单将使用提醒ID提交,并且你的视图可以相应地更新提醒对象.首先你需要更新你的视图函数
您还需要将get_object_or_400导入为
并在html模板中添加如下输入字段
这将解决您的问题,并使其工作....谢谢给予一个upvote请:)
js5cn81o3#
对您关于提醒结束的问题的答复
因为我认为你已经得到了remember_id,现在使用这个remember_id来删除/关闭正确的提醒。修改后的代码如下所示
我想这会像你需要的那样工作