Py学习  »  MCC  »  全部回复
回复总数  85
8 年前
回复了 MCC 创建的主题 » 求助,下面情况如何创建 Model?

jenkins_build_id 不要用id,另开一个字段配

9 年前
回复了 MCC 创建的主题 » getJSON接收不到Django-rest-framework的json数据

我想到个很搓的招儿,把json的这段改成console.log("{% url 'snippet-list' %}?format=json"),看看是地址给错了还是这里js不让用模板渲染啥。。

(还有这种超长的字段,完全可以不显示在列表的嘛,除非需求要求)我在想为啥我没碰到过这种事,才发现我都没设置显示

有个方法,这个model新写一个property, 返回self.简介的前50个字+“...”,然后在admin里面设置这个property, 不显示简介

9 年前
回复了 MCC 创建的主题 » [新手求罩]如何在django中保有一个set

@stosy https://docs.djangoproject.com/en/1.8/topics/cache/

@$yann 太好了,我也学到了

9 年前
回复了 MCC 创建的主题 » [新手求罩]如何在django中保有一个set

不用数据库可以用缓存么

9 年前
回复了 MCC 创建的主题 » 怎么用foreignkey 实现Django下拉选择框

话说user为啥不直接保存request.user 要用user.username? 万一用户去改username了,这个表连接关系就那啥了。。

9 年前
回复了 MCC 创建的主题 » 怎么用foreignkey 实现Django下拉选择框

@HelloSam 我自己很少用View,所以照着文档改的,没调试过。。。

from django.shortcuts import render
from django.views.generic import View


def addReport(View):
    form_class = EnteringForm()
    template_name = 'report_template.html'

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            report_tuple = ReportModel(
                user=request.user.username,
                school=form_context.cleaned_data['school'],
                grade=form_context.cleaned_data['grade'],
                home_location=form_context.cleaned_data['home_location'],
            )
            report_tuple.save()
            form = EnteringForm()
        else:
            return HttpResponse(form_context['user'].errors)
        return render(request, self.template_name, {'form': form})
9 年前
回复了 MCC 创建的主题 » [求助]django admin如何同时插入多条数据

manytomany有个through用法,我没有试过,不知道有没有帮助

9 年前
回复了 MCC 创建的主题 » [求助]django admin如何同时插入多条数据

A ManyToManyField cannot be included in unique_together. (It’s not clear what that would even mean!) If you need to validate uniqueness related to a ManyToManyField,

用many to many的话不是插入多个记录,是插入一条记录,时段包含了 8:00~9:00和9:00~10:00的list,但是这样的唯一我不知道真正效果是啥样的,可能做不到你想要的唯一

如果难受一些就是恢复原状,插入多个记录了。。

9 年前
回复了 MCC 创建的主题 » [求助]django admin如何同时插入多条数据

@ampeeg 申请时段你是怎么做到数据库上面的唯一的?

今天的8:00~9:00和明天的8:00~9:00是怎么唯一的,用的是id还是什么之类的东西?

我之前many to many的想法是,时间这个是没法唯一的,就是在申请的时候逻辑检测是不是被占用

如果一定要唯一,你就需要专门做个表,包含了场地名称,日期,时段,来做到数据库层的唯一,这样表的结构就不是你现在设计的这样了

9 年前
回复了 MCC 创建的主题 » [求助]django admin如何同时插入多条数据

@ampeeg 用manytomany试一试 foreign是one to many的,你这个看上去应该是many to many

9 年前
回复了 MCC 创建的主题 » [求助]django admin如何同时插入多条数据

使用的manytomany吗

9 年前
回复了 MCC 创建的主题 » 怎么用foreignkey 实现Django下拉选择框

上面那个例子的form声明,本来就没有user

class AccountItemForm(forms.Form):
    item_type_choice = ((1, "支出"), (0, "收入"),)
    datetime = forms.DateTimeField(label="帐目日期")
    detail = forms.CharField(widget=forms.Textarea, label="帐目明细", max_length=65535)
    money = forms.DecimalField(label="单位金额", min_value=0.01, max_digits=10, decimal_places=2)
    quantity = forms.IntegerField(label="数量", min_value=1)
    account_type = forms.ChoiceField(label="帐目类型", required=True, widget=forms.Select, choices=(),)
    item_type = forms.ChoiceField(
        label="帐目操作",
        required=True,
        widget=forms.RadioSelect(renderer=RadioCustomRenderer),
        choices=item_type_choice,
        initial='1')

    def set_item_type_choices(self, request):
       //blablabla
9 年前
回复了 MCC 创建的主题 » 怎么用foreignkey 实现Django下拉选择框

@HelloSam 我处理的类似的还真的是在save里面操作的,本身写form里面就没有写user字段,因为user信息本来就是包含在request里面的,就是取出来的时候再判断用户是否合法是不是登录什么的,比如说像这样的

def account_create(request):
    next_path = '/accountbook'
    if not request.user.is_authenticated():// 提前判断用户是否合法
        return message_page(request, '访问错误', '未登录,不能新建帐目。', nextpath=next_path)
    items = Account_item.objects.filter(
        user=request.user).values('detail').distinct()
    if request.method == 'POST':
        item_form = AccountItemForm(request.POST)
        item_form.set_item_type_choices(request)
        if item_form.is_valid():
            account_type_id = int(item_form.cleaned_data['account_type'])
            account_type = None
            item_type = item_form.cleaned_data['item_type']
            money = Decimal(item_form.cleaned_data['money'])
            if int(item_type) is 1:
                money = -money
            if not account_type_id is 0:
                try:
                    account_type = Account_type.objects.get(id=account_type_id)
                    # if not account_type.owner and not account_type.owner is request.user:
                    #    account_type = None
                except Account_type.DoesNotExist:
                    account_type = None
            new_item = Account_item(
                user=request.user, //看这里,save的时候直接赋值进去了
                detail=item_form.cleaned_data['detail'],
                datetime=item_form.cleaned_data['datetime'],
                money=money,
                quantity=item_form.cleaned_data['quantity'],
                account_type=account_type)
            new_item.save()
            return HttpResponseRedirect(next_path)

实践的时候碰到是这样的,用django admin删掉东西,关联的也一起被干掉了,但是直接操作数据库的删东西,关联的不会被干掉,不过对应的关联变成了None

9 年前
回复了 MCC 创建的主题 » 求助:views查询出来一个list里怎么查询另一个?

我倒是没试过直接在template里面用relate,果然更简便

9 年前
回复了 MCC 创建的主题 » 求助:views查询出来一个list里怎么查询另一个?

啊,用A2字段筛选一个B的list

不是上面那么简单

我想到的方法1:

新建一个list:

def(request):
    result = []
    a_list = A.objects.all()
    for a in a_list:
        b_list = B.objects..filter(B2=a)
        result.append({'a':a, 'b_list':b_list})
    return render_to_response('1.html',{'result':result})

 {% for r in result}
        {{ r.a.A1 }}
        {{ r.a.A2 }}
        {% for b in r.b_list%}
            {{ b.B1 }}
            {{ b.B2 }}
        {% endfor%}
{% endfor %}

方法2:

用api方式开放一个根据a查询b_list的接口,需要的时候再ajax调用

方法3:

join查询a和b,出来一大坨,和方法1差不多,然后处理下数据,和1的相比就是查询的次数少

9 年前
回复了 MCC 创建的主题 » 求助:views查询出来一个list里怎么查询另一个?
def(request):
    a_list = A.objects.all()
    b_list = B.objects.all()
    return render_to_response('1.html',{'a_list':a_list,'b_list':b_list})
9 年前
回复了 MCC 创建的主题 » Group by 如何按分组成员数量排序?

(mysql) 其他的backend语句可能细节不一样

其实还有曲线救国方法、、先根据count读出job的列表再根据job表格for读name

9 年前
回复了 MCC 创建的主题 » Group by 如何按分组成员数量排序?
SELECT * FROM test.job;

id  job
1   开发
2   测试
3   销售

SELECT * FROM test.staff;

id  name    job_id
1   张三      1
2   李四      2
3   王五      3
4   赵六      1
5   钱七      2
6   孙八      3
7   周九      1
8   吴十      2
9   郑零      1

SELECT s1.id, s1.name, s1.job_id, j.job
FROM test.staff s1
JOIN ( SELECT job_id, COUNT(*) AS cnt
       FROM test.staff
       GROUP BY job_id
     ) s2 ON ( s2.job_id = s1.job_id )
JOIN test.job j on(j.id = s1.job_id)
ORDER BY s2.cnt DESC ,s1.id;

id  name    job_id  job
1   张三      1       开发
4   赵六      1       开发
7   周九      1       开发
9   郑零      1       开发
2   李四      2       测试
5   钱七      2       测试
8   吴十      2       测试
3   王五      3       销售
6   孙八      3       销售
9 年前
回复了 MCC 创建的主题 » python manage.py startapp name1报错,求助啊!

安装 libsqlite3-dev

9 年前
回复了 MCC 创建的主题 » 新手有个问题想请教一下

如果自己拼sql mysql就

select * from (
    SELECT * FROM test.sleep_news order by -date)
as Subquery group by cat_id;

其他如果有with的就更好弄了,写得可以更美一些。

要是不在乎查询多次的话直接

results = {}
    Categories = Category.objects.all()
    for category in Categories:
        news = News.objects.filter(cat=category).order_by('-date')[0]
        results[category] = news

有些云服务居然是用查询sql次数来收费的我就不吐槽了。。

9 年前
回复了 MCC 创建的主题 » 新手有个问题想请教一下
results = News.objects.all().order_by('cat', '-date').annotate(Count('cat'))
    items = {}
    for result in results:
        print result.cat,result.title
        if not result.cat in items:
            items[result.cat] = result

distinct不太好用,就这样将就了……或者不要应用django的orm 自己拼sql或者SQLAlchemy

9 年前
回复了 MCC 创建的主题 » static目录无法找到?

@痴狂的剑 这个2回事,具体看文档 https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-STATICFILES_FINDERS

9 年前
回复了 MCC 创建的主题 » static目录无法找到?
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

报的什么错

9 年前
回复了 MCC 创建的主题 » python的list的sort方法和 快速排序比较 哪个更快?

我觉得。。。。取决于快排的算法是怎么写的。。。我这写得也太失败了。。

import time
import random
import uuid

def QuickSort(list):
    result = list
    sort_list = [[0, len(result) - 1]]
    while sort_list:
        start, end = sort_list.pop()
        if start + 1 == end:
            if result[start] > result[end]:
                result[start], result[end] = result[end], result[start]
            continue
        pivot = result[start]
        start = start
        left_list = []
        right_list = []
        for i in range(start + 1, end + 1):
            if result[i] < pivot:
                left_list.append(result[i])
            else:
                right_list.append(result[i])
        left_start = start
        left_end = left_start + len(left_list) - 1
        if left_start < left_end:
            sort_list.append([left_start, left_end])
        right_start = start + len(left_list) + 1
        right_end = right_start + len(right_list) - 1
        if right_start < right_end:
            sort_list.append([right_start, right_end])
        result = result[:start] + left_list + \
            [pivot] + right_list + result[end + 1:]
    return result

def comp(list):
    t1 = time.time()
    a1 = QuickSort(list)
    t2 = time.time()
    a2 = sorted(list)
    t3 = time.time()
    list.sort()
    a3 = list
    t4 = time.time()
    print 'quick', t2 - t1, '\t',
    print 'sorted', t3 - t2, '\t',
    print 'sort', t4 - t3,
    print a1 == a2 == a3

comp([random.random() for i in range(100000)])
comp([uuid.uuid1() for i in range(100000)])
comp([100000 - i for i in range(100000)])

quick 0.973999977112    sorted 0.00300002098083     sort 0.00300002098083 True
quick 57.228000164  sorted 0.00699996948242     sort 0.00600004196167 True
quick 13.3680000305     sorted 0.000999927520752    sort 0.0 True
[Finished in 72.0s]
9 年前
回复了 MCC 创建的主题 » Django个人博客终于搞定,附上Github地址

@yanglao745 https://github.com/tmacjx/my_site/blob/master/requirement.txt