标签: django-generic-views

使用django的Ajax视图

我正在开发一个非常大的项目,每个视图都可以通过正常请求和ajax请求通过相同的URL访问.我正在寻找有关如何创建一个小框架以便以非常通用的方式处理它的想法.根据是否通过ajax调用视图,它需要呈现不同的模板并返回json而不是HttpResponse对象.我想收集关于这个主题的任何想法 - 主要目标应该是避免干燥的原则并使代码尽可能重用.我已经考虑了不同的选项作为通用视图,视图装饰器等,但我对任何事情持开放态度.所以,请让我听听您的建议或指向我所知道的任何现成的片段!

django ajax decorator django-views django-generic-views

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

无法通过泛型类视图将'slug'字段传递到URL

我有两个出版物和员工模型:

class Publication(models.Model):
    BOOK_CHAPTER = 1
    ARTICLE = 2
    PUBLICATION_CHOICES = (
        (BOOK_CHAPTER, 'Book chapter'),
        (ARTICLE, 'Article'),
    )
    publication_type = models.IntegerField(choices=PUBLICATION_CHOICES)
    article_title = models.CharField(max_length=250, help_text='Limited to 250 characters. May also be used for book chapter titles.')
    slug = models.SlugField(help_text='Suggested value automatically generated from title.')
    primary_author = models.ForeignKey('Employee', limit_choices_to={'employee_type': 1}, help_text='Most of the time, this will be the faculty member to whom the publication is tied.')
    authors = models.CharField(max_length=250, help_text='Limited to 250 characters. Please adhere to accepted format for style. Include …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在Django中使用基于日期的视图

这可能是一个小小的天真问题,但我一直试图理解如何在django中使用新的 基于日期的视图,但没有一个例子,我处于死胡同.我想要做的是在页面上显示我的所有博客条目(带分页),在侧面导航中我想显示根据年份和月份完成的归档.

我想要的是非常基本的,可以在下面的图片中看到.

在此输入图像描述

如果有人可以给我一个例子那么它会非常棒.我可以处理模板,但只需要知道如何使用基于类的通用视图.如果是通用视图,我真的没用过多.

django django-generic-views

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

使用POST数据确认通用FormView POST成功返回给用户

使用通用FormView我想反映一些关于提交给用户的POST数据,但我不确定如何最好地执行此操作.

class MyView(generic.FormView):
    form_class = MyForm
    def get_success_url(self):
        return reverse('success')
Run Code Online (Sandbox Code Playgroud)

reverse('success') 重定向到一个简单的

class SuccessView(generic.TemplateView):
    template_name = 'success.html'
Run Code Online (Sandbox Code Playgroud)

有没有办法可以通过调用访问params对象,或者有更好(更简单)的方法吗?TIA DanSuccessViewget_success_url

更新(我的解决方案,但感谢您的想法)

我实际上发现这是解决问题的最简单方法(对我来说):

class SuccessMixin(object):
    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form, **kwargs)

    def form_valid(self, form):
        # this is my post processing step which returns the
        # feedback data that I want to pass to the user
        form_data = form.get_some_data_from_form()
        return render_to_response('submitted.html', 
            {'form_data': form_data,}, 
            context_instance=RequestContext(self.request))
Run Code Online (Sandbox Code Playgroud)

每个视图都继承了这个mixin,如果表单有效,那么我从中提取反馈数据并将其作为响应呈现 - …

python django django-forms django-generic-views

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

如何从通用更新视图中获取我的对象ID,以便在django 1.1中以我的形式使用

我使用通用视图来更新对象.

我使用的形式:

class VehiPrepaClientForm(ModelForm):




class Meta:
    model = VehiPrepa
    fields = ('date_dem_prepa','carburant','ty_carburant')



def clean(self):
    cleaned_data = self.cleaned_data
    data = self.cleaned_data['date_dem_prepa']

    vehiprepa = get_object_or_404(VehiPrepa,pk=object_id)
    if data :

        vehiprepa.demande_prepa = 1
        vehiprepa.save()
        date_in = vehiprepa.date_in
        delta = data - date_in
        date_dem = date_in + delta 
        if delta.days < 2 :
            raise forms.ValidationError("Veuillez entrez une date au dela du : %s" %(date_dem) )

        if data.weekday()>= 5 :

            raise forms.ValidationError("La date choisie n'est pas valide, cela tombe un weekend")    

        #test si date demande sup …
Run Code Online (Sandbox Code Playgroud)

django django-generic-views object-identity

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

'Role'对象没有属性'__name__'

我正在尝试将基于角色的权限实现到我的应用程序中.我有一个decorator role_required,我可以传递一组用户角色,只有具有该角色的用户才能访问该视图.我已经为用户正确分配了角色,但现在我收到了AttributeError声明'Role' object has no attribute '__name__'

views.py 文件:

m_role_required = method_decorator(role_required)
class AddProposal(FormView):

    @m_role_required(roles.space_admin)
    def dispatch(self, *args, **kwargs):
        return super(AddProposal, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

装饰者role_required:

from django.contrib.auth.decorators import user_passes_test
def role_required(*roles):

    def check_role(user):
        return getattr(user, 'role', None) in roles
    return user_passes_test(check_role)
Run Code Online (Sandbox Code Playgroud)

Role类:

class Roles(object):
    _roles_dict = None

    @property
    def roles_dict(self):

        if self._roles_dict is None:
            self._roles_dict = {}
            for item in self._config:
                if isinstance(item, basestring):
                    # An item like 'manager'
                    self._roles_dict[item] = None
                else:
                    # Anything else …
Run Code Online (Sandbox Code Playgroud)

python django django-views django-generic-views

3
推荐指数
2
解决办法
9112
查看次数

如何使用通用视图在视图中设置模型的字段?

我有一个模型,有一个作者ForeignKey,如下:

class Appointment(models.Model):
    # ...
    author = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

我希望在author为当前登录用户创建约会时自动设置该字段.换句话说,作者字段不应出现在我的Form类中:

class AppointmentCreateForm(ModelForm):
    class Meta:
        model = Appointment
        exclude = ('author')
Run Code Online (Sandbox Code Playgroud)

有两个问题:

  1. 如何访问通用CreateView中的表单并设置author
  2. 如何告诉表单保存排除字段以及从用户输入读取的值?

django django-generic-views

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

Django FormView:区分创建和更新

我有一个自定义FormView类的mixin,如果保存成功,只需添加成功消息,所以:

class MessagesMixin(object):

    def form_valid(self, form):
        response = super(MessagesMixin, self).form_valid(form)
        messages.add_message(self.request,
                             messages.SUCCESS,
                             'Successfully created %s' % form.instance)
        return response
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这只能真正涵盖创作.如果实例更新,则消息仍将显示"已创建".有没有办法区分form_valid方法中的创建/更新?

django django-generic-views

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

Django:分页ListView数据库性能

我有一个ListView分页:

class StoriesListView(ListView):
    model = Story
    paginate_by = 20

    def get_queryset(self):
        return Story.objects.all().order_by('-updated_at')
Run Code Online (Sandbox Code Playgroud)

Story在数据库中有1000个对象.当用户加载我的视图时会发生什么?是从数据库查询所有1000还是只查询20?我该如何优化呢?

database django django-generic-views django-pagination

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

使用UpdateView上传Django文件

我尝试了通用视图的简约django实现来上传个人资料图片.

views.py

class UpdateProfile(UpdateView):
    form_class = UpdateUserProfileForm
    model = UserProfile
    success_url = reverse_lazy('show_profile')
Run Code Online (Sandbox Code Playgroud)

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    website = models.URLField(blank=True)
    picture = models.ImageField(upload_to='user/img/%Y-%m-%d/', blank=True)
Run Code Online (Sandbox Code Playgroud)

forms.py

class UpdateUserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['website','picture']
Run Code Online (Sandbox Code Playgroud)

userprofile_form.html

<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="{% trans "Save" %}"/>
</form>
Run Code Online (Sandbox Code Playgroud)

一切正常.现在错误消息.网站字段将正确更新,搜索按钮允许选择要上传的文件.但是,该文件永远不会出现在系统中,并且数据库字段仍为空.

不幸的是,关于文件上传的django文档(https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/)不包含通用视图,所以我想知道它是否可行.

更新:感谢Alasdair的回答,我更新了我的模板,因此它现在可以正常用作带有通用视图的图片上传的简约原型.

要显示图片,文档(https://docs.djangoproject.com/en/1.10/howto/static-files/)的说明再次非常有用.

此外,媒体设置是将文件上载到媒体文件夹所必需的.

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = 'absolute-path-to/media'
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf import settings
from django.conf.urls.static import static …
Run Code Online (Sandbox Code Playgroud)

django file-upload django-generic-views

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