小编Dan*_*mes的帖子

与JsonResponse分页

我想为我的JsonResponse添加分页.

我目前正在使用django.http.JsonResponse弹性搜索API生成json.我想添加一个分页功能.我的代码如下:

class ResultQueryView(View):
    def get(self, request):
        resource_meta = request.GET.getlist("resource_meta")
        locations = request.GET.getlist("location")
        page = request.GET.get("page")
        logger.info("Got search query where resource_meta: {} and locations: {}".format(resource_meta, locations))
        results = resource_query(resource_meta, locations)
        resource_ids = [r["_id"] for r in results['hits']['hits']]
        resources = get_enriched_resources(request.user, Resource.objects.filter(internal_id__in=resource_ids))
        serialized = ResourceSerializer(resources, many=True)
        return JsonResponse({"resources": serialized.data})
Run Code Online (Sandbox Code Playgroud)

django django-views

7
推荐指数
2
解决办法
1045
查看次数

单击时将锚标记的链接复制到剪贴板

这是我用来显示一些数据的代码。在这段代码中,我有锚标签,我想在点击它时复制该锚标签的链接。这是我使用的代码如下:

<div class="search_item_list clearfix" id="response">
   <?php foreach($jobs as $job){
   ?>
    <a class="copy_text"  data-toggle="tooltip" title="Copy to Clipboard" 
       href="<?=base_url().'home/company_profile_detail?id='.$job['company_id'];?>"><span class="icon link"><i class="fa fa-link"></i></span>Copy Link</a>
    <?php } ?>
</div>

<script>
   $(".copy_text").click(function(e){
      e.preventDefault();
      var button = $(this);
      var text = button.attr("href");
      text.select();
      $(document).execCommand("copy");
      alert("Copied the text ");
   })
</script>
Run Code Online (Sandbox Code Playgroud)

我得到 jQuery 作为

text.select 不是函数。

jquery

7
推荐指数
1
解决办法
8748
查看次数

输出Django模型作为表

我有一个视图定义(尝试)将模型输出为表.这是我到目前为止:

def output_table(request):
    output = My_Model()
    return render_to_response('outputtable.html', {'output': output})
Run Code Online (Sandbox Code Playgroud)

这是outputtable.html的HTML:

<html>
<table>
    {{ output.as_table }}
</table>
</html>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?它不起作用.现在,它正确地传递模型,因为如果我将My_Model()更改为My_Model.objects.all()然后将其输出为简单的{{output}},那么它会显示我将在Django shell中看到的内容.

django model html-table

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

检查集合中的任何值

假设我有以下设置:

things = {'foo', 'bar', 'baz'}
Run Code Online (Sandbox Code Playgroud)

我想找出是否存在for bar存在于集合中。我试过了:

>>> 'foo' in things or 'bar' in things
True
Run Code Online (Sandbox Code Playgroud)

这行得通,但是在没有多个or语句的情况下,还有没有更多的Pythonic方式可以执行此检查?我在标准的Python集合操作中找不到能实现此目的的任何东西。使用 {'foo', 'bar'} <= things支票两种,但我想,以检查其中一方。

python set

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

即使 DEBUG=False 也记录 SQL 查询

这是我的日志配置settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'file': {
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs', 'django.log'),
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
        },
        'django.template': {
            'handlers': ['file', 'console'],
            'level': 'INFO',
        },
        'App': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

有一种我无法解释的行为:如果我运行,debug=True我可以看到所有 SQL 查询都记录到控制台,但是当debug=False这种情况没有发生时,即使我不更改上面的配置。

为什么是这样?如何在日志配置中确定 SQL 查询是否记录到控制台?

django logging python-logging

6
推荐指数
2
解决办法
3231
查看次数

即使需要的值丢失,Django验证调用clean()

我是Django的新手,对表单处理过程中的验证步骤感到有些困惑.我知道默认情况下需要所有表单字段类型(在我的情况下是ModelForm).我假设Django会引发VaidationError,以防所需的表单字段留空而不调用表单的clean方法.

这就是为什么我没有检查是否在以下clean()方法中设置了任何数据:

def clean(self):
    date =  self.cleaned_data.get('date')
    time_start = self.cleaned_data.get('time_start')
    time_end = self.cleaned_data.get('time_end')
    user_type = self.cleaned_data.get('user_type')

    if Event.objects.filter(user_type=user_type, date=date, 
                            time_start__lt=time_start, 
                            time_end__gt=time_start).exclude(pk=self.instance.pk).count():
        raise forms.ValidationError("Overlapping with another event.")
Run Code Online (Sandbox Code Playgroud)

在将所有字段留空的情况下提交表单会导致a

ValueError:不能将None用作查询值.

如果我删除我的clean()方法,我将得到预期ValidationErrors的不填写必填字段 - 这是我所期望的clean()方法仍然存在.

知道什么可能导致这种情况发生吗?如果Django 调用clean 之前没有检查所需的值,我会感到惊讶.

forms django validation

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

限制Django管理员更改权限

我试图限制组中的用户无法更改其组无权更改的字段.例如:

class StudentReferral(models.Model):
    teacher = models.CharField(max_length=50)
    referral_first_name = models.CharField(max_length=50)
    referral_last_name = models.CharField(max_length=50)
    accepted = models.BooleanField(blank=True)
Run Code Online (Sandbox Code Playgroud)

现在,教师都在一个用户组中,接受或拒绝推荐的人在另一个用户组中.教师的用户群应该只能够编辑以下字段:teacher,referral_first_namereferral_last_name.其他用户组应该只能编辑接受的字段.两个组都应该能够看到所有字段.

是否有内置于django中的内容可以实现这一目标或自定义方式?

django django-admin

4
推荐指数
1
解决办法
2237
查看次数

Django:无需额外 SQL 即可获取外键字段的值

模型

class Photo(models.Model):
    doc_pic = models.ImageField(upload_to='specialist/', default='', null=True, blank=True, max_length=250)
    doctor = models.ForeignKey(Doctor, blank=True, null=True, on_delete=models.SET_NULL, related_name='photos')
Run Code Online (Sandbox Code Playgroud)

我查询照片

temp = Photo.objects.all()
Run Code Online (Sandbox Code Playgroud)

现在我想要保存在医生字段中的医生 ID(对于第一个元素)

print(temp[0].doctor)
Run Code Online (Sandbox Code Playgroud)

我收到了 Doctor 对象。但我想要数字 ID。我怎么能得到那个?

我知道我可以得到它

temp[0].doctor.id 
Run Code Online (Sandbox Code Playgroud)

但这会向我想避免的数据库提交另一个查询。

django django-queryset

4
推荐指数
1
解决办法
3519
查看次数

Django测试:创建测试数据库时出错:数据库“ database_name”已存在

我在测试时遇到问题。这是我第一次编写测试,但我遇到了问题。

我刚刚在应用程序内部创建了一个测试文件夹userstest_urls.py用于测试url。

当我输入:

python manage.py test users

它说:

为别名“默认”创建测试数据库...创建测试数据库时出错:数据库“ database_name”已存在

如果要尝试删除测试数据库“ database_name”,请输入“ yes”,否则请输入“ no”以取消:

这是什么意思?如果输入是会怎样?我会丢失数据库中的所有数据吗?

python database django postgresql

4
推荐指数
1
解决办法
1276
查看次数

无法在__init__处向ModelForm添加字段

我有ModelForm的问题.显示字段"test1",但"test2" - 不显示.使用base_fields没有帮助.

# models.py
class Country(models.Model):
    name = CharField(max_length=100)

# admin.py
class CountryAdminForm(ModelForm):
    test1 = forms.CharField('test1')

    def __init__(self, *args, **kwargs):
        super(CountryAdminForm, self).__init__(*args, **kwargs)
        self.fields['test2'] = forms.CharField('test2')

    class Meta:
        model = Country

class CountryAdmin(admin.ModelAdmin):
    form = CountryAdminForm

admin.site.register(Country, CountryAdmin)

Run Code Online (Sandbox Code Playgroud)

谢谢.

python django modelform

3
推荐指数
1
解决办法
3486
查看次数

Django:如何在模型中验证unique_together

我有以下内容:

class AccountAdmin(models.Model):

    account = models.ForeignKey(Account)
    is_master = models.BooleanField()
    name = models.CharField(max_length=255)
    email = models.EmailField()

    class Meta:
        unique_together = (('Account', 'is_master'), ('Account', 'username'),)
Run Code Online (Sandbox Code Playgroud)

如果我然后在同一个帐户上创建一个与另一个用户名相同的新AccountAdmin,而不是让我在模板中显示错误,则会出现IntegrityError,页面就会中断.我希望在我看来,我可以去:

if new_accountadmin_form.is_valid():
    new_accountadmin_form.save()
Run Code Online (Sandbox Code Playgroud)

我该如何克服这个问题.是否有第二种is_valid()类型的方法检查数据库是否违反了该unique_together = (('Account', 'is_master'), ('Account', 'username'),)部分?

我不想在我的视图中捕获IntegrityError.那个域逻辑与表示逻辑混合在一起.它违反DRY,因为如果我在2页上显示相同的表格,我将不得不重复相同的块.它也违反了DRY,因为如果我有两种形式用于同一件事,我必须写相同的,除了:再次.

python django django-models unique-constraint django-views

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