我有两个型号,Event并且Series,其中每个事件属于一个系列.大多数情况下,一个事件start_time与它的系列相同default_time.
这是模型的精简版.
#models.py
class Series(models.Model):
name = models.CharField(max_length=50)
default_time = models.TimeField()
class Event(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
start_time = models.TimeField()
series = models.ForeignKey(Series)
Run Code Online (Sandbox Code Playgroud)
我在管理应用程序中使用内联,以便我可以一次编辑系列的所有事件.
如果已经创建了一个系列,我想start_time用系列' 预填充每个内联事件default_time.到目前为止,我已经为Event创建了一个模型管理表单,并使用该initial选项以固定时间预填充时间字段.
#admin.py
...
import datetime
class OEventInlineAdminForm(forms.ModelForm):
start_time = forms.TimeField(initial=datetime.time(18,30,00))
class Meta:
model = OEvent
class EventInline(admin.TabularInline):
form = EventInlineAdminForm
model = Event
class SeriesAdmin(admin.ModelAdmin):
inlines = [EventInline,]
Run Code Online (Sandbox Code Playgroud)
我不知道如何从这里开始.是否可以扩展代码,以便该start_time字段的初始值是Series' default_time?
我创建了一个自定义用户模型,我在我的应用程序中成功使用.
问题是在Admin中,在用户编辑屏幕上,我得到了当前密码哈希的显示,而不是用于设置密码的非常有用的界面.
我在Python 2.7上使用Django 1.5b1.
为了管理员用户界面,我如何说服Django管理员以对待本机用户的方式对待我的用户模型?
我有一个我刚刚开始的Django项目,我在bitbucket上主持它.现在我需要在openshift中托管它,并且这样做的方法是它们为您提供了一个git存储库,并且每次推送它们都会自动部署.问题是存储库附带了几个用于配置和设置的顶级文件夹,而有效的django项目必须位于名为wsig/openshift的子文件夹中.
我的问题是,如何将我的本地django存储库中的更改提交到本地openshift存储库的wsig/openshift子文件夹?因为我打算继续在bitbucket /本地存储库上开发
当我尝试运行此测试时:
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.test import Client
class StatisticTest(TestCase):
def setUp(self):
self.client = Client()
def test_schedule_view(self):
url = reverse('schedule')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'schedule.html')
Run Code Online (Sandbox Code Playgroud)
我得到AssertionError:没有用于呈现响应的模板。
我的看法是:
class Schedule(View):
def get(self, request):
games = add_team_info(query.get_current_schedule())
if games is not []:
available_schedules = generate_schedule_list(games[0]["season_type"], games[0]["week"])
is_available = True
else:
available_schedules = []
is_available = False
return render_to_response("schedule.html",
{"games": games, "available_schedules": available_schedules, "is_available": is_available})
Run Code Online (Sandbox Code Playgroud)
和urls.py:
url(r'^schedule/$', views.Schedule.as_view(), name='schedule'),
Run Code Online (Sandbox Code Playgroud) 在模型形式中,我可以覆盖表单字段
class waypointForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
super(waypointForm, self).__init__(*args, **kwargs)
self.fields['waypoints'] = forms.ModelChoiceField(queryset=Waypoint.objects.filter(user=user))
Run Code Online (Sandbox Code Playgroud)
如何在基于类的视图中使用相同的功能CreateView,以便我可以覆盖表单字段?
我试过get_form_kwargs和get_form,但一切都是徒劳.我需要创建一个模型表单吗?
模型.py:
from django.db import models
class Line(models.Model):
text = models.CharField(primary_key=True, max_length=255)
class Line2 (models.Model):
text_line = models.ForeignKey ("Line", primary_key = True)
Run Code Online (Sandbox Code Playgroud)
视图.py:
from django.core.context_processors import csrf
from django.shortcuts import render
import datetime
from models import Line, Line2
def test_page (request):
if 'uid' in request.POST:
user_id = request.POST['uid']
line_query = Line.objects.get (text = user_id)
new_entry = Line2 (text_line_id = line_query)
new_entry.save()
return render(request, "templateFiles/testPage1.html", {"page_result":"Data Entered"});
else:
return render(request, "templateFiles/testPage1.html")
Run Code Online (Sandbox Code Playgroud)
模板:
<div id = "header">
{{ page_result }}
<form action="http://127.0.0.1:8000/test_page/" method …Run Code Online (Sandbox Code Playgroud) 在我的viewSet中,我正在进行查询,
queryset= Books.objects.all();
Run Code Online (Sandbox Code Playgroud)
现在从ajax调用我从UI获得我的过滤器值,即auther的年龄,性别等.总共将有5个过滤器.
现在我遇到的问题是如何向查询添加过滤器(只有那些具有任何值的过滤器).
我尝试的是我检查了单个过滤器值并进行了查询,但这样就失败了,就像用户删除过滤器值或添加多个过滤器一样.任何更好的建议如何实现这一目标?
我的models.py中有一些带有CharFields的模型。
例如
class MyModel(models.Model):
item_port = models.CharField(max_length=50)`
Run Code Online (Sandbox Code Playgroud)
我意识到这对于端口来说有点愚蠢,因此将它们全部更改为IntegerFields,如下所示:
class MyModel(models.Model):
item_port = models.IntegerField(null=True)
Run Code Online (Sandbox Code Playgroud)
我在本地开发系统和MySQL类型数据库中使用sqlite3进行部署。通常,使用以下命令从头进行部署时,我会为新的docker实例进行迁移:
python manage.py makemigrations
和
python manage.py migrate
但是,我还记录了在git中对sqlite3数据库所做的所有迁移,以供参考。
我的主要问题是,我是否可以简单地使用数据库中的现有数据从CharField进行makemigrations / migrate到IntegerField的迁移(在客户端站点上将是MySQL类型的数据库,还是我需要手动执行类似的操作?:
https://docs.djangoproject.com/zh-CN/1.9/topics/migrations/#data-migrations
非常感谢。
所以我想做一个DetailView单独显示照片及其相关信息.但是,我想让它确保用户也有权访问照片.
这是视图的urls.py
url(r'^photo/(?P<slug>[\-\d\w]+)/$', views.PhotoDetail.as_view(), name='photo'),
Run Code Online (Sandbox Code Playgroud)
这是views.py
class PhotoDetail(DetailView):
template_name = 'otologue/photo_detail.html'
def get_object(self, queryset=None):
slug = self.get_slug_field()
print(slug)
object_instance = Photo.objects.filter(slug=slug)
print(object_instance)
object_user = object_instance.photoextended.user
user = get_object_or_404(User, username=self.request.user) # Get the user in the view
if object_user != user: # See if the object_user is the same as the user
return HttpResponseForbidden('Permission Error')
else:
return object_instance
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样我尝试get_slug_field()但是当我打印它时它只会说'slug'当slug应该说出url中的对象slug.从这里,object_instance没有任何对象,然后为什么我试图从中获取用户,它找不到任何数据.
我有以下模型:
CURSES=(('python','Python'),('django','Django'),...)
class Asig(models.Model):
...
name = models.CharField(max_length=100, choices=CURSES)
class Profesor(AbstractUser):
...
asigs = models.ManyToManyField(Asig)
Run Code Online (Sandbox Code Playgroud)
然后,当我使用ModelForm渲染表单时,多对多字段使用'python'字符串而不是'Python'来显示自身,此外,当我查看呈现的html编码时,multiselect选项如下所示:
<option value='1'>python</option>
Run Code Online (Sandbox Code Playgroud)
代替
<option value='python'>Python</option>
Run Code Online (Sandbox Code Playgroud) django ×10
python ×6
django-admin ×2
mysql ×2
assert ×1
django-1.5 ×1
django-forms ×1
django-orm ×1
django-views ×1
git ×1
jinja2 ×1
many-to-many ×1
migration ×1
openshift ×1
sqlite ×1
testing ×1