我正在尝试设置我的上传,以便如果用户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,但该函数不知道用户是谁,所以我有点迷失.
谢谢您的帮助!
我希望通过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) 是否有可能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)
有没有办法将这些整合到一个表单中,或者我只需要创建一个表单并处理数据库加载并保存自己?
我有一个基于类的自定义视图
# 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)
我是否需要覆盖任何方法才能执行此操作?
有没有办法获得完整的 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) 如何向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) 我有一个表格,当我不想要它们时,根据需要出现几个字段.这是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)
我该怎么办才能不需要这两个字段?
考虑以下模型和形式:
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上的内容?
在我的视图函数中,我想调用另一个视图并将数据传递给它:
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) 我想在模板中调用我的模型中的函数,例如:
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)
这不起作用,我可以调用一个不消耗任何东西的函数,但是如果它有参数则无法找到该怎么做
干杯
django ×10
python ×10
django-forms ×2
django-admin ×1
django-views ×1
forms ×1
model ×1
redirect ×1
url ×1
widget ×1