小编Rob*_*ert的帖子

django ListView 指定可用于类内所有方法的变量

我的网址有一个关键字“shop_name”变量。还有带有“名称”字段的商店模型。

在我的 ListView 类中,我需要对 Shop 模型进行重复查询,以从 Shop.get_type() 方法获取 unicode 变量。根据结果​​,选择适当的模板目录或查询集(使用子类 django 模型)。

这是代码。

class OfferList(ListView):
    def get_template_names(self):
        shop = Shop.objects.get(name=self.kwargs['shop_name'])
        return ["shop/%s/offer_list" % shop.get_type()]
    def get_queryset(self):
        shop = Shop.objects.get(name=self.kwargs['shop_name'])
        Offer = shop.get_offers_model()
        return Offer.objects.all()

    def get_context_data(self, **kwargs):
        # again getting shop instance here ...
        shop = Shop.objects.get(name=self.kwargs['shop_name'])
        context = super(OfferList, self).get_context_data(**kwargs)
        context['shop'] = shop
        return context
Run Code Online (Sandbox Code Playgroud)

问题是最好的方法是什么,这样我可以获得一些可用于所有方法的 var (在本例中为商店)?我不是 python 专家(可能是基本问题)。我尝试过init覆盖,但后来我无法获取 Exchange_name (在 urls.py 中指定)来获取正确的“shop”实例。我想避免重复。

谢谢

python generics django listview view

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

Django用户HiddenInput与直接在基于类的视图的视图中保存

请将此作为考虑问题.也许有人会使用下面的解决方案之一.

我有几个包含ForeignKey(User)字段的模型.我的基于类的创建视图来自泛型CreateView.

添加新对象时,有两个选项可以保存关联用户:

  1. 通过覆盖form_valid方法在视图中保存表单; 这不会暴露user_id(这里没有提到不应该暴露的数据)

    class CreateOfferView(CreateView):
    
        model = Offer
        form_class = SomeModelFormWithUserFieldExcluded
    
        def form_valid(self, form):
            instance = form.save(commit=False)
            instance.user = self.request.user
            instance.save()
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将用户ID存储(和公开)的表单保存在隐藏字段中.这是棘手的部分.有更多带有用户字段的模型...所以在创建表单时,我需要用初始(当前登录)用户填充用户字段,并且我还需要隐藏该字段.为此,我用过我的OwnFormMixin

    class OwnFormMixin(object):
    
        def get_form(self, form_class):
            form = super(OwnFormMixin, self).get_form(form_class)
            form.fields['user'].widget = forms.HiddenInput()
    
        def get_initial(self):
            initial = super(OwnFormMixin, self).get_initial()
            initial['user'] = self.request.user.pk
            #I could also do this in get_form() with form.fields['user'].initial
    
    class CreateOfferView(OwnFormMixin, CreateView):
        model = Offer
        form_class = SomeModelFormWithAllFields
    
    Run Code Online (Sandbox Code Playgroud)

还有更多CreateXXXView使用OwnFormMixin..

如何在表单中保存用户数据?

隐藏与直接保存在您的视图中?什么是利弊?

django django-class-based-views

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

django根据UserProfile.language()字段数据发送本地化电子邮件

在我的商品网站中,如果商品符合某些要求(模型中指定的过滤器),用户可以设置电子邮件警

因此,当用户"A"添加商品时,post_save信号将被发送到芹菜并检查是否应用了用户警报过滤器,如果有,则发送电子邮件.

问题是我不知道如何安全地为每封发送的电子邮件设置内容.该服务以更多语言提供.用户可以更改其配置文件中的语言(通过User < - Userprofile.language())字段,以便每封电子邮件的语言都设置为UserProfile.language()值...

尝试使用translation.activate(userinstance.UserProfile.language),但这不会像我期望的那样工作.我看到translation.activate()为整个线程执行翻译激活?

PS:电子邮件内容是从模板呈现的.

email django translation internationalization

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

用户登录后显示Django民意调查

当用户登录时,我想检查他是否已经投票.如果没有,请将他重定向到投票表单页面.尝试使用user_logged_in信号,但它完全忽略了我的redirect()函数.

@receiver(user_logged_in)
def check_poll(sender, user, request, **kwargs):
    """Check if any active polls available and redirect user if needed"""

    try:
        # there can only be 1 active poll
        poll = Poll.objects.get(active=True) 
        if not poll.has_user_voted(request.user):
            return redirect(poll)

    except ObjectDoesNotExist:
        pass
Run Code Online (Sandbox Code Playgroud)

也许我这样做的方式错了.也许我应该修改请求,因为我不确定我应该在这里返回响应...有没有修改login()视图的方法?

authentication django redirect signals request

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

ModelForm用户Mixin

我有一些用户字段的模型.

为此,我想创建一个表单mixin,它将添加self.user实例(在视图中提供给表单).可能吗 ?

这是一个例子

class UserFormMixin(object):
    """Removes user instance from kwargs and adding it to object"""
    def __init__(self, *args, **kwargs):
        super(UserFormMixin, self).__init__(*args, **kwargs)
        self.user = kwargs.pop('user')

    def save(self, **kwargs):
        obj = super(UserFormMixin, self).save(commit=False)
        obj.user = self.user
        if kwargs['commit']:
            return obj.save()
        else:
            return obj
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

class SomeFormWithUserField(UserFormMixin, ModelForm):
    class Meta:
        model = SomeModelWithUserField
        fields = ['fields without user']

    def save(self, **kwargs):
        data = super(SomeFormWithUserField, sefl).save(commit=False)
        #data already with user prepended
        #do some other stuff with data
        if …
Run Code Online (Sandbox Code Playgroud)

forms django modelform

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