小编Chr*_*att的帖子

Django Forms - 从多个选择字段中获取数据

我有一个这样的表格:

class MyForm(forms.Form):
    site = forms.ChoiceField(choices=SITE_CHOICES, label=ugettext_lazy('Site'),)  
    ...
    params = forms.MultipleChoiceField(
             choices=PARAM_CHOICES,
             label=ugettext_lazy('Select Parameters'),
             widget=forms.CheckboxSelectMultiple()
             )
Run Code Online (Sandbox Code Playgroud)

在我的模板中:

<form action="{% url results %}" method="get">{% csrf_token %}
{% for field in myform %}
<div class="field_wrapper">
    {{ field.errors }}
    {{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" name="submit" value="{% trans 'Query' %}"  />
</form>
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我将表单作为GET提交时,变量如下所示:

    site=1&params=foo&params=bar&params=something&submit=Query
Run Code Online (Sandbox Code Playgroud)

我的params变量显然被最后的选择覆盖了吗?如何将提交的数据作为单独的变量进行访问?

任何帮助赞赏.

forms django get

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

使用Web API访问查询字符串和表单参数

如果您因为任何原因选择不在HttpPost请求中使用modelbinding,还有哪些其他方法可以访问QueryString(HttpGet)或Form参数(HttpPost)?

传统上你可以这样做:

Request.QueryString["Key"]
Request.Form["Key"]
Request["Key"]
Run Code Online (Sandbox Code Playgroud)

我似乎无法在Web API中找到任何类似的东西.

c# asp.net-web-api

8
推荐指数
2
解决办法
2174
查看次数

覆盖特定模型的Django管理员URL?

首先是一点背景:

我有一个Event有各种各样event_type的模型.我想打破其中一个事件类型,'电影',进入它自己的管理员.我有基本的功能:一个代理模型继承自Event命名Film,该代理模型的自定义管理器,它只将其过滤为"电影"事件类型,它是自己的ModelAdmin.

问题是相反的.我现在需要从主Event管理员中过滤掉电影.我不想改变Event模型或其默认管理器,因为影响太大了.因此,我尝试创建另一个代理模型,EventAdminProxy其唯一目的是在管理员中提供过滤的事件列表.然后,我Event使用现有的ModelAdmin 注册此模型,而不是.

这显然有效,但它有改变管理员URL的不幸副作用.而不是更改列表位于"/ admin/event/event /",它现在位于"/ admin/event/eventadminproxy /".

我要做的是保持这个设置,但也保留旧的URL.我试过重载ModelAdmin的get_urls方法,但从我所知道的,你无法控制那里的完整URL,只有"/ app_label/model_class /"之后的内容.

我想在主urls.py中覆盖它,但无法找出可接受的视图.实际视图仅在实例化的ModelAdmin对象上可用,而不是类本身.

有关如何覆盖管理员中使用的URL的任何想法?

django url django-urls django-admin

7
推荐指数
2
解决办法
7592
查看次数

如何覆盖django电子邮件中的发件人地址(通过Gmail发送)

在我的settings.py中,我有这个值:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'pass'
EMAIL_USE_TLS = True
Run Code Online (Sandbox Code Playgroud)

然后在我的观点中,我从我的模型中获取了一个电子邮件地址,例如:

#models.py
class Profile(models.Model):
    name = models.CharField(...)
    email_address = models.EmailField()
Run Code Online (Sandbox Code Playgroud)

让我们假设email_addressProfile模型sample@gmail.com

#views
def send_email(request,profile_id):
   profile = Profile.objects.get(pk=profile_id)
   email = profile.email_address
Run Code Online (Sandbox Code Playgroud)

所以当我发送邮件时,

send_mail('subject', 'content', email, ['example1@example.com'])
Run Code Online (Sandbox Code Playgroud)

当电子邮件已经发送时,sender_email仍然是user@gmail.com.有人可以教我如何覆盖这个电子邮件地址吗?谢谢.

django gmail

7
推荐指数
2
解决办法
3558
查看次数

允许在ModelAdmin上进一步覆盖save_formset

非常基本的使用场景.我想保存创建对象的用户和上次修改它的用户.但是,它是一个内联模型,所以我当然需要使用save_formset.Django文档有以下示例代码:

class ArticleAdmin(admin.ModelAdmin):
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()
        formset.save_m2m()
Run Code Online (Sandbox Code Playgroud)

问题是,如果你注意到,因为super从未被调用,这是一个死胡同.如果ModelAdmin是子类并且以相同的方式覆盖此方法,则会丢失父级中固有的功能.这很重要,因为这是一个常见的使用场景,我想要分解功能,所以我创建了以下内容:

class TrackableInlineAdminMixin(admin.ModelAdmin):
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            if hasattr(instance, 'created_by') and hasattr(instance, 'modified_by'):
                if not instance.pk:
                    instance.created_by = request.user
                instance.modified_by = request.user
            instance.save()
        formset.save_m2m()
        super(TrackableInlineAdminMixin, self).save_formset(request, form, formset, change)
Run Code Online (Sandbox Code Playgroud)

super更多地调整了出于习惯的调用,而不是认为它实际上会导致formset保存两次.然而,它仍然适用于除了一个之外的每个场景:删除.只要您尝试删除管理员中的内联,就会出现错误.这个错误很模糊,并没有真正与我的问题相关,但我相信这与你刚删除其中一个实例后再次尝试保存formset有关.super删除调用时,代码工作正常.

长和短,有没有什么方法我都缺少自定义formset保存行为允许子类做自己的覆盖?

django django-forms django-admin

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

无效的密码格式或未知的散列算法

我的网站上的一位用户最近设法在尝试登录时触发此追溯.在Django Admin中,他的密码读取Invalid password format or unknown hashing algorithm.

我不知道是什么导致了这一点.到目前为止,这是一个孤立的案例,我和其他用户已成功注册并登录该网站.

追溯

Traceback (most recent call last):

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/var/git/bbox/userprofile/views.py", line 67, in login_view
   if form.is_valid():

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 124, in is_valid
   return self.is_bound and not bool(self.errors)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 115, in _get_errors
   self.full_clean()

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 271, in full_clean
   self._clean_form()

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 299, in _clean_form
   self.cleaned_data = self.clean()

 File "/var/git/bbox/userprofile/forms.py", line 83, in clean
   self.user_cache = authenticate(username=username, password=password)

 File …
Run Code Online (Sandbox Code Playgroud)

django

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

使用具体类型实现ICollection <ISomething>以满足Entity Framework

所以,这是一个迟钝的问题,但让我看看我是否可以相对简单地说出来.可以说我有以下界面:

public interface IFoo
{
    ICollection<IBar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我实施:

public class Foo : IFoo
{
    public virtual ICollection<IBar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

只有Entity Framework无法使用接口,所以它几乎完全忽略了这个导航属性.为了让EF识别它,我需要将其更改为:

public virtual ICollection<Bar> Bars { get; set; }
Run Code Online (Sandbox Code Playgroud)

Bar我的实施将在哪里IBar?只是,无法实现IBar不需要的接口Bar.

现在,考虑一个稍微不同的场景,我刚刚得到一个基本的外键:

public interface IFoo
{
    IBar Bar { get; set; }
}

public class Foo : IFoo
{
    public virtual IBar Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

同样的问题,但在这里,我可以通过添加:

public class Foo : IFoo
{ …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework interface entity-framework-6

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

有什么方法可以覆盖action方法的属性而不必覆盖整个方法?

我在MVC 5中使用属性路由,但我开始注意到一点痛点.我有一种情况,我想继承控制器,因为所有的动作都会做同样的事情.但是,我显然需要为子类的操作使用不同的路由.现在,我正在做类似于:

public class FooController : Controller
{
    [Route("foo", Name = "Foo")]
    public virtual ActionResult Foo()
    {
        ...

        return View();
    }
}

public class BarController : FooController
{
    [Route("bar", Name = "Bar")]
    public override ActionResult Foo()
    {
        return base.Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很糟糕.我不是重复实际操作方法的代码(在某些情况下是相当多的),至少,但这对我来说感觉不对.此外,在基本操作方法定义由于某种原因而发生变化的情况下,这会成为一种维护噩梦.通常,我是否有某些方法可以在不必覆盖方法的情况下更改属性?也许,某些属性特定于路由.或者我只是运气不好?

c# asp.net-mvc attributerouting asp.net-mvc-5

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

指定带有空路由的可选格式扩展名

我的控制器看起来像:

[FormatFilter]
[Route("api/foo")]
public class FooController : Controller
{
    [HttpPost("")]
    public IActionResult Foo()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我要添加一个可选的格式扩展名,如此处所述。但是,我希望路由以`/api/foo.json'结尾。以下操作失败,返回所有版本404。

[HttpPost(".{format?}"]
Run Code Online (Sandbox Code Playgroud)

我的下一个想法是在做类似的事情:

[HttpPost("foo.{format?}")]
Run Code Online (Sandbox Code Playgroud)

有效地将控制器范围的路线的那部分移动到动作上。但是,这将引发500,并显示错误:

错误:在段'foo。{format?}'中,可选参数'format'前面是无效的段'foo。'。在可选参数之前只能有一个句点(。)。

显然,这唯一的意志的工作是沿着线的东西:

[HttpPost("{id}.{format?}"]
Run Code Online (Sandbox Code Playgroud)

换句话说,似乎可选的格式参数必须始终跟随另一个参数才能起作用,这对我来说似乎是绝对骨头的限制。我在这里想念什么吗?有什么想法可以像这样的静态路由使它起作用吗?

asp.net-core asp.net-core-2.0

5
推荐指数
2
解决办法
618
查看次数

django如何在更新用户时发送post_save信号?

阅读了文档,

https://docs.djangoproject.com/en/dev/topics/signals/

我在我的signals.py文件中创建了这个:

from django.db.models.signals import post_save
from django.dispatch import receiver
from models import User

from models import Story

@receiver(post_save, sender=User)
def create_initial_story(sender,instance, signal, created, **kwargs):
    print "helloooo!"
    if created:
        Story(user = instance, title = 'Random Stories', description="Random stories", is_closed = False, is_random = True).save()
Run Code Online (Sandbox Code Playgroud)

从我读到的,我认为我需要做的就是发送信息.好吧,那并创建一个新用户(我使用django注册框架)然而,没有发送任何东西(好吧,我没有做任何接收器方法).我还删除了@receiver注释的"sender = User"参数 - 离开

@receiver(post_save)
Run Code Online (Sandbox Code Playgroud)

但那没有关系.没有任何内容输出到控制台,没有保存新数据... 当用户保存时,我是否需要从用户发送信号?如果是这样,我该怎么做?我正在使用django-registration,所以我有一个UserProfile定义...我的意思是,在哪里(在什么文件/方法中)我会告诉用户发送信号?

django django-signals

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

将 c# Datetime 转换为 input[type=date]

我想要的只是将 07.03.2014 转换为 2014-03-07,dd.mm.yyyyyyyy-mm-ddasp.net MVC 控制器;)谢谢。

asp.net-mvc datetime date

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

发送不带 DefaultRequestHeaders 的 HttpClient 请求

我正在使用一个设计不佳的 API,其缺陷之一是,它有一个特定的端点,不应提供特定的自定义标头,而实际上每个其他端点都需要它。因此,它包含在 中DefaultRequestHeaders,因此我不需要将其手动添加到每个请求中。

然而,现在,对于这个特定的端点,我需要删除它,而且我不确定如何或是否可能。让事情变得有些复杂的是,我正在处理一个单例范围的HttpClient实例,所以任何捏造的事情DefaultRequestHeaders都是不可行的。换句话说,我不能做一些像临时删除标头然后在请求之后将其添加回之类的黑客行为,因为这可能会影响正在发出的其他并发请求。令人沮丧的是,即使我下降到使用SendAsync自定义HttpRequestMessage实例,HttpClient 仍然添加标头。

另外,虽然它可以工作,但我真的不想在没有 HttpClient标头添加到DefaultRequestHeaders. 由于多种原因,在同一个类中使用两个不同的HttpClient实例似乎是一个非常糟糕的主意。

我在这里运气不好,还是在过去一个小时搜索互联网后我错过了一些解决方案?

更新

我确实发现,对于自定义HttpRequestMessage实例,我可以通过将其设置为HttpRequestMessage. 由于它是明确设置的,因此HttpClient不会用默认版本覆盖它。这仍然意味着标头正在发送,但至少它实际上没有值。不过,如果存在的话,仍然对更好的解决方案感兴趣。

c# dotnet-httpclient

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

如何以毫秒为单位获取UTC时间

我试图使用gettimeofday函数,但它计算了自大纪元以来所经过的时间,这不是我需要的.

有人可以帮忙吗?

c++ linux utc

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