小编Ser*_*jik的帖子

Django FileField,在运行时确定upload_to

我正在尝试设置我的上传,以便如果用户joe上传文件,则转到MEDIA_ROOT/joe,而不是让每个人的文件都转到MEDIA_ROOT.问题是我不知道如何在模型中定义它.以下是目前的情况:

class Content(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to='.')
Run Code Online (Sandbox Code Playgroud)

所以我想要的不是'.' 作为upload_to,让它成为用户的名字.

据我所知,从Django 1.0开始,您可以定义自己的函数来处理upload_to,但该函数不知道用户是谁,所以我有点迷失.

谢谢您的帮助!

python django django-models

127
推荐指数
3
解决办法
5万
查看次数

使用Django在两个日期之间进行选择

我希望通过Django进行日期选择.

我知道如何使用原始SQL很容易地做到这一点,但是如何使用Django ORM实现这一点?

这是我想在我的查询中添加30天之间的日期:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')
Run Code Online (Sandbox Code Playgroud)

python django

109
推荐指数
3
解决办法
6万
查看次数

单个django ModelForm中的多个模型?

是否有可能ModelForm在django中包含多个模型?我正在尝试创建个人资料编辑表单.所以我需要包含User模型 UserProfile模型中的一些字段.目前我正在使用这样的2个表单

class UserEditForm(ModelForm):

    class Meta:
        model = User
        fields = ("first_name", "last_name")

class UserProfileForm(ModelForm):

    class Meta:
        model = UserProfile
        fields = ("middle_name", "home_phone", "work_phone", "cell_phone")
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些整合到一个表单中,或者我只需要创建一个表单并处理数据库加载并保存自己?

python django django-forms

89
推荐指数
3
解决办法
6万
查看次数

Django基于类的视图:如何将其他参数传递给as_view方法?

我有一个基于类的自定义视图

# myapp/views.py
from django.views.generic import *

class MyView(DetailView):
    template_name = 'detail.html'
    model = MyModel

    def get_object(self, queryset=None):
        return queryset.get(slug=self.slug)
Run Code Online (Sandbox Code Playgroud)

我想像这样传入slug参数(或其他参数到视图)

MyView.as_view(slug='hello_world')
Run Code Online (Sandbox Code Playgroud)

我是否需要覆盖任何方法才能执行此操作?

python django django-views django-generic-views

88
推荐指数
6
解决办法
8万
查看次数

确定完整的Django url配置

有没有办法获得完整的 django url配置?

例如,Django的调试404页面没有显示包含的url配置,因此这不是完整的配置.


:感谢Alasdair,这是一个示例脚本:

import urls

def show_urls(urllist, depth=0):
    for entry in urllist:
        print "  " * depth, entry.regex.pattern
        if hasattr(entry, 'url_patterns'):
            show_urls(entry.url_patterns, depth + 1)

show_urls(urls.urlpatterns)
Run Code Online (Sandbox Code Playgroud)

python django url

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

在Django 1.3或更低版本的Django Admin中自定义过滤器

如何向django admin(显示在模型仪表板右侧的过滤器)添加自定义过滤器?我知道很容易包含一个基于该模型字段的过滤器,但是这样的"计算"字段呢:

class NewsItem(models.Model):
    headline = models.CharField(max_length=4096, blank=False)
    byline_1 = models.CharField(max_length=4096, blank=True)
    dateline = models.DateTimeField(help_text=_("date/time that appears on article"))
    body_copy = models.TextField(blank=False)

    when_to_publish = models.DateTimeField(verbose_name="When to publish",  blank=True, null=True)

    # HOW CAN I HAVE "is_live" as part of the admin filter?  It's a calculated state!!
    def is_live(self):
        if self.when_to_publish is not None:
            if ( self.when_to_publish < datetime.now() ):
                return """ <img alt="True" src="/media/img/admin/icon-yes.gif"/> """
        else:
            return """ <img alt="False" src="/media/img/admin/icon-no.gif"/> """      

    is_live.allow_tags = True
Run Code Online (Sandbox Code Playgroud)
class NewsItemAdmin(admin.ModelAdmin):
    form = NewsItemAdminForm
    list_display …
Run Code Online (Sandbox Code Playgroud)

python django django-admin

73
推荐指数
3
解决办法
5万
查看次数

Django需要模型形式的字段

我有一个表格,当我不想要它们时,根据需要出现几个字段.这是models.py的表单

class CircuitForm(ModelForm):
    class Meta:
        model = Circuit
        exclude = ('lastPaged',)
    def __init__(self, *args, **kwargs):
        super(CircuitForm, self).__init__(*args, **kwargs)
        self.fields['begin'].widget = widgets.AdminSplitDateTime()
        self.fields['end'].widget = widgets.AdminSplitDateTime()
Run Code Online (Sandbox Code Playgroud)

在实际的Circuit模型中,字段定义如下:

begin = models.DateTimeField('Start Time', null=True, blank=True)
end = models.DateTimeField('Stop Time', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我的views.py就在这里:

def addCircuitForm(request):
    if request.method == 'POST':
        form = CircuitForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/sla/all')
    form = CircuitForm()    
    return render_to_response('sla/add.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能不需要这两个字段?

python forms django model widget

71
推荐指数
3
解决办法
7万
查看次数

Django ModelForm for Many-to-Many字段

考虑以下模型和形式:

class Pizza(models.Model):
    name = models.CharField(max_length=50)

class Topping(models.Model):
    name = models.CharField(max_length=50)
    ison = models.ManyToManyField(Pizza, blank=True)

class ToppingForm(forms.ModelForm):
    class Meta:
        model = Topping
Run Code Online (Sandbox Code Playgroud)

当你查看ToppingForm时,它可以让你选择浇头上的披萨,一切都只是花花公子.

我的问题是:如何定义一个ModelForm for Pizza,让我可以利用Pizza和Topping之间的多对多关系,让我选择Toppings在Pizza上的内容?

python django django-forms

71
推荐指数
3
解决办法
7万
查看次数

Django使用参数返回redirect()

在我的视图函数中,我想调用另一个视图并将数据传递给它:

return redirect('some-view-name', backend, form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)

,其中后端是registration.backends对象,而form.cleaned_data是表单数据的字典(但必须以*args或**kwargs的形式发送,以防止Don't mix *args and **kwargs in call to reverse()!出现错误).从我在文档中找到的内容:

def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')
Run Code Online (Sandbox Code Playgroud)

看起来我需要提供'some-view-name'参数,但它只是视图函数的名称,还是url的名称?所以我想使它类似于在django-registration中完成的方式,其中:

to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)

def post_registration_redirect(self, request, user):
    return ('registration_complete', (), {})
Run Code Online (Sandbox Code Playgroud)

好的,我现在可以直接调用我的视图功能,还是需要提供一个网址?更重要的是,我的funciotn调用(以及需要时的URL)应该是什么样的?后端和cleaning_data都只是通过此视图传递以供以后使用.我试过这个,但不合适:

url(r'^link/$', some-view-name)   
def some-view-name(request, *args):
Run Code Online (Sandbox Code Playgroud)

除此之外:

return redirect('some_url', backend=backend, dataform.cleaned_data) 
url(r'^link/$', some-view-name)    
def some-view-name(request, backend, data):
Run Code Online (Sandbox Code Playgroud)

还是NoReverseMatch.但是在django-registration中,我看到过这样的事情:

url(r'^register/$',register,{'backend': 'registration.backends.default.DefaultBackend'}, name='registration_register'),

def register(request, backend, success_url=None, form_class=None,
             disallowed_url='registration_disallowed',
             template_name='user/login_logout_register/registration_form.html',
             extra_context=None):
Run Code Online (Sandbox Code Playgroud)

python django redirect parameter-passing

70
推荐指数
3
解决办法
12万
查看次数

django模板系统,调用模型中的函数

我想在模板中调用我的模型中的函数,例如:

class ChannelStatus(models.Model):
 ..............................
 ..............................

    def get_related_deltas(self,epk):
        mystring = ""
        if not self.get_error_code_delta(epk):
            return mystring
        else:
            for i in self.get_listof_outage():
                item = i.error_code.all()
                for x in item:
                    if epk == x.id:
                        mystring= mystring +" "+str(i.delta())
        return mystring         
Run Code Online (Sandbox Code Playgroud)

当我想从模板中调用它时:假设在渲染时,我将channel_status_list作为

channel_status_list = ChannelStatus.objects.all()

{% for i in channel_status_list %}
  {{ i.get_related_deltas(3) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这不起作用,我可以调用一个不消耗任何东西的函数,但是如果它有参数则无法找到该怎么做

干杯

python django django-templates django-models

63
推荐指数
4
解决办法
7万
查看次数