标签: django-class-based-views

来自 FormView 中创建的对象 url 的 success_url

我有一个表单类视图,当用户填写表单时,它会创建一个对象(目录中的产品)。该对象是在视图的 form_valid 方法内创建的。我希望视图通过 FormView 的“success_url”属性重定向到创建的对象 url(产品 url)。

问题是我不知道如何在 success_url 方法中指定该 url,因为在定义类本身时仍未创建该对象。我尝试过使用reverse_lazy或对象的get_absolute_url()方法,但同样的问题仍然存在。

class ImageUpload(FormView):
 [...]
 success_url = reverse_lazy('images:product', kwargs={'id': product.id })
 [...]
 def form_valid(self, form):
  [...]
  self.product = Product.objects.create(
        user=self.request.user, title=title)
Run Code Online (Sandbox Code Playgroud)

django django-class-based-views

2
推荐指数
1
解决办法
1833
查看次数

具有自定义标识符(不是 pk)的 Django DetailView:字段“id”需要一个数字,但得到“XQ1wfrpiLVAkjAUL”

我正在使用 Django 3.2

我有一个模型和 GCBV 定义如下:

class Foo(models.Model):
    identifier = models.CharField(max_length=16, db_index=True)
    # ... 

class FooDetailView(DetailView):
    model = Foo
    template_name = 'foo_detail.html'
    pk_url_kwarg = 'identifier'

    # TODO, need to add logic of flagged items etc. to custom Manager and use that instead
    queryset = Foo.objects.filter(is_public=True)

    # # FIXME: This is a hack, just to demo
    # def get_object(self, queryset=None):
    #     objs = Foo.objects.filter(identifier=self.request.GET.get('identifier', 0))
    #     if objs:
    #         return objs[0]
    #     else:
    #         obj = Foo()
    #         return obj
Run Code Online (Sandbox Code Playgroud)

在 …

django django-class-based-views

2
推荐指数
1
解决办法
1089
查看次数

基于django类的视图get_context_data得到了一个意想不到的关键字争论

我试图从基于django类的视图做一个CRUD应用程序.这是我更新/创建笔记的观点.

class CreateNoteView(CreateView):

    model = Note
    template_name = 'edit_note.html'

    def get_success_url(self):
        return reverse('notes-list')

    def get_context_data(self):

        context = super(CreateNoteView, self).get_context_data(**kwargs)
        context['action'] = reverse('notes-create')
        return context


class UpdateNoteView(UpdateView):

    model = Note
    template_name = 'edit_note.html'

    def get_success_url(self):
        return reverse('notes-list')

    def get_context_data(self, **kwargs):

        context = super(UpdateNoteView, self).get_context_data(**kwargs)
        context['action'] = reverse('notes-edit',
                                    kwargs={'pk':self.get_object().id})
        return context
Run Code Online (Sandbox Code Playgroud)

这是我的模型文件:

# Create your models here.
class Note(models.Model):

    title = models.CharField(max_length=200)
    description = models.TextField()
    pub_date = models.DateField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我的网址文件如下所示:

urlpatterns = patterns('',
       url(r'^create/$',CreateNoteView.as_view(), name='notes-create',),
       url(r'^$', ListNoteView.as_view(), name='notes-list',),    
       url(r'^edit/(?P<pk>\d+)/$', UpdateNoteView.as_view(), name='notes-edit',),                       
)
Run Code Online (Sandbox Code Playgroud)

模板如下: …

python django django-forms django-class-based-views

1
推荐指数
1
解决办法
1万
查看次数

使用CreateView和inlineformset_factory在Django中发出保存图像

使用通用的基于类的CreateView我试图通过ClearableFileInput小部件上传图像,这是由inlineformset_factory使用的默认小部件,但这是失败的.

form.save()在我的视图中运行得很好,它似乎是失败的specimage_form.save().如果我在提交过程中打印self.request.FILES,看起来好像所选文件在内存中 - 但是在SpecImage save()函数中粘贴一个print语句,很明显这个函数永远不会被调用.

可以使用内联管理站点上传图像,在这种情况下我会看到print语句.

这是我的代码 - 感谢任何建议或指导.提前致谢..

models.py

class Spec(models.Model):
    car = models.ForeignKey('vehicles_dvla_listpoint.AutoLookup')
    owner = models.ForeignKey(User)
    uploaded = models.DateField(default=date.today, editable=False)

    def get_absolute_url(self):
        return reverse('car_create')

    def __unicode__(self):
        return "{0}".format(self.car)

class SpecImage(models.Model):
    def orig_car_id_folder(instance, filename):
        return 'uploads/images/orig/{0}/{1}'.format(instance.car_id, filename)
    def thumb_car_id_folder(instance, filename):
        return 'uploads/images/thumb/{0}/{1}'.format(instance.car_id, filename)

    car = models.ForeignKey(Spec)

    orig_image = models.ImageField(
        upload_to=orig_car_id_folder, 
        verbose_name='Upload Image',
    )

    thumbnail = models.ImageField(
        upload_to=thumb_car_id_folder,
        null=True,
        blank=True,
    )

    def save(self, force_update=False, force_insert=False): 
        print "here ...." # << Don't see this where submitting outside of the admin
        import …
Run Code Online (Sandbox Code Playgroud)

django django-generic-views django-class-based-views

1
推荐指数
1
解决办法
1695
查看次数

在django中使用ListView,获取__init __()只需1个参数(给定2个)

我是django的新手,我正在尝试显示我在数据库中的专辑列表.这是专辑模型

class Album(models.Model):
"""Album model"""
  title = models.CharField(max_length=255)
  prefix = models.CharField(max_length=20, blank=True)
  subtitle = models.CharField(blank=True, max_length=255)
  slug = models.SlugField()
  band = models.ForeignKey(Band, blank=True)
  label = models.ForeignKey(Label, blank=True)
  asin = models.CharField(max_length=14, blank=True)
  release_date = models.DateField(blank=True, null=True)
  cover = models.FileField(upload_to='albums', blank=True)
  review = models.TextField(blank=True)
  genre = models.ManyToManyField(Genre, blank=True)
  is_ep = models.BooleanField(default=False)
  is_compilation = models.BooleanField(default=False)

  class Meta:
    db_table = 'music_albums'
    ordering = ('title',)

  def __unicode__(self):
    return '%s' % self.full_title
Run Code Online (Sandbox Code Playgroud)

我的观点是

    class album_list(ListView):
        template_name = "/music/album_list.html"
        context_object_name = 'list_of_albums'
       #paginate_by = '15'

        def get_queryset(self): …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-views django-class-based-views

1
推荐指数
1
解决办法
895
查看次数

带request.user的Django通用CBV查询集

如果我这样做:

class ActivityListView(ListView):
    template_name = "activities/activities.html"
    queryset = Activity.objects.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)

我明白了:

"请求"未定义

......显然.然后,如果我这样做:

def get_context_data(self, **kwargs):
    queryset = Activity.objects.filter(owner=self.request.user)

    context = super(ActivityListView, self).get_context_data(**kwargs)
    context["activities"] = queryset

    return context
Run Code Online (Sandbox Code Playgroud)

我明白了:

不正确配置的"ActivityListVew"必须定义"queryset"或"model",

我明白了 我想知道哪个是解决这个问题的最佳方法?

django django-class-based-views

1
推荐指数
1
解决办法
351
查看次数

基于Django类的视图获取发布数据并发送响应

在Api上工作我想在Django中给出基于类的视图.

这是我到目前为止所得到的:

urls.py

from django.conf.urls import url

from .api import Api

urlpatterns = [
    url(r'^', Api.as_view())
]
Run Code Online (Sandbox Code Playgroud)

api.py

from django.http import HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View    

class Api(View):    
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        super(Api, self).dispatch(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return HttpResponse("result")

    def get(self, request):
        return HttpResponse("result")
Run Code Online (Sandbox Code Playgroud)

从Postman调用此代码时,我不断遇到2个问题:

发布数据

邮递员我在Post标题中设置了一个值但是当我使用调试器来检查POST数据时它就不存在了.

返回HttpResponse

我一直在收到错误 The view api.api.Api didn't return an HttpResponse object. It returned None instead.

当我将post方法更改为get方法并使用Postman发送get请求时,我得到相同的结果.

python django django-class-based-views

1
推荐指数
1
解决办法
1504
查看次数

错误通用详细信息视图必须使用对象pk或slug调用,即使使用pk也是如此

我正在尝试更新具有外键字段的视图的记录,因为我遇到了错误,因为我尝试更新没有外键字段的另一个模型并且它工作得非常好.

还有其他这样的排队,但在我的情况下,我正在通过PK.

urls.py

 urlpatterns = [
        url(r'^info/(?P<studentpk>\d+)/update/$', views.updatestudent.as_view(), name="updatestudent"),

]
Run Code Online (Sandbox Code Playgroud)

views.py

class updatestudent(UpdateView):
    model = Student
    form_class = forms.studentform
    template_name = "temp/updatestudent.html"

    def get_success_url(self):
        return reverse("courses")
Run Code Online (Sandbox Code Playgroud)

updatestudent.html

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update" />
</form>
Run Code Online (Sandbox Code Playgroud)

models.py

class Student(models.Model):
    classfk = models.ForeignKey(Class)
    name = models.CharField(max_length=100)
    birth_date = models.DateField('Birthdate')

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

错误

AttributeError: Generic detail view updatestudent must be called with either an object pk or a slug.
Run Code Online (Sandbox Code Playgroud)

python django django-views django-class-based-views

1
推荐指数
1
解决办法
2586
查看次数

Django:在基于类的视图中包含媒体(css/js)

我正在将基于方法的视图中的旧django代码更新为基于类的视图.

我知道如何通过Media类在表单中包含媒体(css/js)

如果我的基于类的视图不包含任何表单,我如何使用媒体类?

django django-class-based-views django-media

1
推荐指数
1
解决办法
1197
查看次数

如何在ListView中提供Django query_set之前修改它

我有一个Django项目,其中包含一个用户可以搜索的Song Objects数据库.

我的models.py看起来像这样:

class Songs(models.Model):

    title = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)
    link = models.CharField(max_length=255, unique=True)
    album = models.CharField(max_length=100)
    duration = models.CharField(max_length=40)  # Duration in num_secs
Run Code Online (Sandbox Code Playgroud)

我的views.py看起来像这样:

class ResultsView(ListView):

    template_name = os.path.join(APPNAME, "results.html")
    model = Songs
    context_object_name = 'results'
    paginate_by = 60
    ordering = ['title']

    def get_context_data(self, **kwargs):

        context = super(ResultsView, self).get_context_data(**kwargs)
        context['query'] = self.request.GET.get('query')
        return context

    def get_queryset(self, **kwargs):

        query = self.request.GET.get('query')
        query_set = Songs.objects.all()
        results = query_set.filter(title__icontains=query)
        return list(results)
Run Code Online (Sandbox Code Playgroud)

我的results.html模板如下所示:

{% if results %}
    <div class="container-fluid">
        <div class="row">
    {% …
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views

1
推荐指数
1
解决办法
297
查看次数