我想序列化一个模型,但是想要包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找:
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?我看到你可以将额外的"上下文"传递给序列化器,是在上下文字典中传入附加字段的正确答案吗?使用这种方法,获得我需要的字段的逻辑不会与串行器定义一起自包含,这是理想的,因为每个序列化实例都需要my_field.在DRF序列化器文档的其他地方,它说 "额外的字段可以对应于模型上的任何属性或可调用".我正在谈论的是额外的领域吗?我应该在Foo模型定义中定义一个返回my_field值的函数吗?在序列化器中我将my_field挂钩到那个可调用的函数?那是什么样的?
在此先感谢,如有必要,请尽快澄清问题.
我试图从窗口 - >首选项 - >常规 - >编辑器 - >文本编辑器调整选项卡的宽度,其中有一个"显示选项卡宽度"字段.但是无论我在那里输入什么,当我在Java文件中开始换行时,缩进的大小是4.任何想法?
我们将AngularJS嵌入到我们的Django应用程序中,URL路由由AngularJS ui-router处理.所有这些都可以在使用ui-sref并在应用程序中单击的部分之间正常导航.
return $stateProvider.state('root.dashboard', {
abstract: true,
url: 'dashboard/'
}).state('root.dashboard.profile', {
url: 'profile/',
views: {
'@': {
templateUrl: Urls['dashboard:profile'](),
controller: 'ProfileController'
}
}
}).state('root.dashboard.home', {
url: '',
views: {
'@': {
templateUrl: Urls['dashboard:dashboard_home'](),
controller: 'DashboardController'
}
}
...
Run Code Online (Sandbox Code Playgroud)
问题是当用户导航到非根页面(例如http://example.com/dashboard/profile/)时,用户刷新浏览器,重新加载浏览器的URL或只是将非根URL直接粘贴到浏览器中.http://example.com/dashboard/在这种情况下,用户将被重定向到根页(),而不是在浏览器中加载保留相同URL的页面.
由于路由由Angular处理,因此在服务器端我们没有为这些非根URL定义任何url路由; 相反,我们有中间件将404重定向到根页面:
class Redirect404(object):
def process_response(self, request, response):
if response.status_code != 404 or request.method != 'GET':
return response
return HttpResponsePermanentRedirect('/dashboard')
Run Code Online (Sandbox Code Playgroud)
我们希望路由器能够维护原始URL并将用户带回原始页面(即' dashboard/profile').注意我们在Angular中设置了HTML5Mode,如下所示:
$locationProvider.html5Mode = true;
Run Code Online (Sandbox Code Playgroud)
我们的理解和/或设置存在一些错误,并希望澄清.
在我的Google Web工具包应用程序中,我的gwt.xml文件在模块中包含以下行:
<module rename-to='foo'>
...
<script src="foo.js"></script>
...
Run Code Online (Sandbox Code Playgroud)
我的问题是:在我的GWT项目中,我实际上放置了foo.js,以便在编译项目时它被包装到战争中?
我有以下型号:
class Message(models.Model):
date = models.DateTimeField()
user = models.ForeignKey(User)
thread = models.ForeignKey('self', blank=True, null=True)
...
class Forum(models.Model):
name = models.CharField(max_length=24)
messages = models.ManyToManyField(Message, through="Message_forum", blank=True, null=True)
...
class Message_forum(models.Model):
message = models.ForeignKey(Message)
forum = models.ForeignKey(Forum)
status = models.IntegerField()
position = models.IntegerField(blank=True, null=True)
tags = models.ManyToManyField(Tag, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
在管理站点中,当我去添加/更改论坛时,我没有看到您期望的消息列表框.但是,如果我删除ManyToManyField声明中的'through'参数,它会显示出来.那是怎么回事?我已将所有三个模型(加上Tag)注册到admin.py中的管理站点.
TIA
我有一个django Formset,我想在另一个表单的中间进行布局.我正在使用django-crispy-forms在父表单中设置布局__init__:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Field, Div
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Div(
Div(Field('foo'), css_class='span3'),
Div(Field('bar'), css_class='span4'),
css_class='row'
),
Field('baz', css_class='span1'),
...
)
self.helper.add_input(Submit('submit', 'Submit', css_class='btn btn-primary offset4'))
Run Code Online (Sandbox Code Playgroud)
我的模板只是使用{% crispy %}标记呈现表单.
我想知道如何合并formset.我应该在上面的init函数中实例化它吗?我怎么在那里引用它?
还有其他一些在线形式和formset组合的例子,其中一个是连续渲染的,但是我想知道我是否可以更好地控制它们如何与crispy的布局结合在一起.
我在mysql 4.1中使用了以下查询,但在5.0中没有:
SELECT * FROM email e, event_email ee
LEFT JOIN member m on m.email=e.email
WHERE ee.email_id = e.email_id
Run Code Online (Sandbox Code Playgroud)
错误:1054('on子句'中的未知列'e.email')
我有一个模特:
class XCall(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
send_on = models.DateTimeField(default=datetime.now)
recipient = models.ForeignKey(User)
text = models.CharField(max_length=4096)
backup_calls = models.IntegerField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
并为该模型的序列化器:
class CallSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='call-detail',
)
# some validation and custom field definitions
...
class Meta:
model = XCall
fields = ('url', 'id', 'text', 'recipient', 'send_on', 'backup_calls', 'status')
lookup_field= 'pk'
Run Code Online (Sandbox Code Playgroud)
这是列表视图:
class CallList(generics.ListCreateAPIView):
serializer_class = CallSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrSuperuser,)
def pre_save(self, obj):
auth_user = self.request.user
obj.auth_user = auth_user
def get_queryset(self):
"""
This view should return a list of …Run Code Online (Sandbox Code Playgroud) 我想在删除对象之前运行验证,以防止在某些情况下删除并作为验证错误返回.我怎么做?我目前看来不正确:
class CallDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = XCall.objects.all()
serializer_class = CallSerializer
...
def pre_delete(self, obj):
if obj.survey:
raise serializers.ValidationError("Too late to delete")
Run Code Online (Sandbox Code Playgroud) django ×5
javascript ×2
angularjs ×1
cron ×1
crontab ×1
django-admin ×1
django-forms ×1
eclipse ×1
gwt ×1
left-join ×1
many-to-many ×1
mysql ×1
redirect ×1
rest ×1
tabs ×1
validation ×1