小编Nei*_*eil的帖子

Django REST Framework:向ModelSerializer添加其他字段

我想序列化一个模型,但是想要包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找:

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挂钩到那个可调用的函数?那是什么样的?

在此先感谢,如有必要,请尽快澄清问题.

django rest django-rest-framework

122
推荐指数
7
解决办法
8万
查看次数

在eclipse 3.5中更改编辑器选项卡宽度

我试图从窗口 - >首选项 - >常规 - >编辑器 - >文本编辑器调整选项卡的宽度,其中有一个"显示选项卡宽度"字段.但是无论我在那里输入什么,当我在Java文件中开始换行时,缩进的大小是4.任何想法?

eclipse tabs

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

AngularJS + Django:URL刷新或直接访问未正确加载

我们将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)

我们的理解和/或设置存在一些错误,并希望澄清.

javascript django redirect angularjs angular-ui-router

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

gwt和javascript文件

在我的Google Web工具包应用程序中,我的gwt.xml文件在模块中包含以下行:

<module rename-to='foo'>
...
  <script src="foo.js"></script>
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:在我的GWT项目中,我实际上放置了foo.js,以便在编译项目时它被包装到战争中?

javascript gwt

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

Django Admin:多对多列表框没有显示带有参数

我有以下型号:

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

many-to-many django-admin manytomanyfield

13
推荐指数
2
解决办法
9155
查看次数

django crispy forms:在表单中嵌套formset

我有一个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的布局结合在一起.

django django-forms django-crispy-forms

13
推荐指数
3
解决办法
6597
查看次数

MySQL 5离开加入未知列

我在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')

mysql left-join mysql-error-1054

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

每个月的第2个和第4个星期六运行

在本月的第2个和第4个星期六运行作业的cron(linux)语法是什么?

cron crontab

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

Django REST Framework:可浏览API表单中的默认字段

我有一个模特:

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)

django django-rest-framework

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

Django REST框架:在删除之前验证

我想在删除对象之前运行验证,以防止在某些情况下删除并作为验证错误返回.我怎么做?我目前看来不正确:

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 validation django-rest-framework

10
推荐指数
4
解决办法
3503
查看次数