Python Django为url查询字符串设置书签

Python Django为url查询字符串设置书签,python,django,Python,Django,我正在通过一些过滤器(django过滤器)查询图书对象列表,我想做的是保存我的研究(即我的url和GET参数),为用户创建一个书签对象 型号.py class Bookmark(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) name = models.CharField(max_length=20) url = models.U

我正在通过一些过滤器(django过滤器)查询图书对象列表,我想做的是保存我的研究(即我的url和GET参数),为用户创建一个书签对象

型号.py

class Bookmark(models.Model):    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=20)
    url = models.URLField(max_length=200)
class BookmarkForm(BootstrapForm, forms.ModelForm):

    class Meta:
        model = Bookmark
        fields = ['nome', 'url']
        widgets = {
            'url': forms.HiddenInput()
        }
forms.py

class Bookmark(models.Model):    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=20)
    url = models.URLField(max_length=200)
class BookmarkForm(BootstrapForm, forms.ModelForm):

    class Meta:
        model = Bookmark
        fields = ['nome', 'url']
        widgets = {
            'url': forms.HiddenInput()
        }
为此,我扩展了CreateView并尝试将当前url传递给bookmark.url的初始值

class AddBookmarkView(PermissionRequiredMixin, LoginRequiredMixin, CreateView):
    permission_required = 'core.add_bookmark'
    template_name = 'core/bookmark_form.html'
    model = Bookmark
    form_class = BookmarkForm

    def get_initial(self):
        initial = super().get_initial()
        initial['url'] = request.GET.urlencode()
        return initial

    def get_success_url(self):
        return reverse('elenco_libri')

    def form_valid(self, form):
        bookmark = form.save()
        bookmark.user = self.request.user
        bookmark.save()
        return HttpResponseRedirect(self.get_success_url())
这没有任何作用,因为我在get_initial()函数中没有get请求。在哪里可以存储url?我考虑过get()函数,但不知道如何实现。有人能帮忙吗?提前谢谢

这没有任何作用,因为我在
get\u initial()
函数中没有get请求

实际上,基于类的视图中的请求对象是一个属性:
self.request

因此,您可以使用以下内容生成URL:

class AddBookmarkView(PermissionRequiredMixin, LoginRequiredMixin, CreateView):
    permission_required = 'core.add_bookmark'
    template_name = 'core/bookmark_form.html'
    model = Bookmark
    form_class = BookmarkForm

    def get_initial(self):
        initial = super().get_initial()
        initial['url'] = self.request.GET.urlencode()
        return initial

    def form_valid(self, form):
        bookmark = form.save(commit=False)
        bookmark.user = self.request.user
        bookmark.save()
        return HttpResponseRedirect(self.get_success_url())
class AddBookmarkView(PermissionRequiredMixin、LoginRequiredMixin、CreateView):
权限\所需='core.add\书签'
模板名称='core/bookmark\u form.html'
模型=书签
form_class=书签表单
def get_首字母(自身):
initial=super().get_initial()
初始['url']=self.request.GET.urlencode()
返回首字母
def表单_有效(自身、表单):
bookmark=form.save(commit=False)
bookmark.user=self.request.user
bookmark.save()
返回HttpResponseRedirect(self.get\u success\u url())
但是,上面的内容只会给您查询字符串。如果您对路径也感兴趣,您可能希望使用

您可能也不想在
form\u valid
函数中将对象保存到数据库中,因此首先获取书签,然后设置
用户
,然后将该对象保存到数据库中


请注意,
HiddenInput()。此外,我不认为通过表单设置书签本身是必要的。您可以构造一个视图,例如使用AJAX调用设置书签,并使用JavaScript呈现表单以设置名称并提交书签。

您已经创建了,它位于
self.request
。在get_initial中,my self.request包含当前视图的路径,即AddBookMarkView映射的url。这不是我要保存在url字段中的内容。如果不是以_valid()的形式保存,在数据库中保存对象的位置可以吗?你的回答不清楚。对于这项任务,我将考虑使用AJAX,我试图使其以最简单的方式工作,然后寻找一个更优化的解决方案。@gccallie:不,我们在这里通过
书签保存它。save()
,但不是以
格式保存。save()
,因为这可能会引发异常。@WillemVanOnsem您能帮我解决一个类似的问题吗?