我在Postman集合中有10个以上的请求,每次在我的本地服务器和测试服务器上进行测试时,我必须手动将URL从"localhost:8000"更改为"test.mysite".有没有解决办法一次改变所有这些?
Here is my code:-
function get_dataset(data){
columns_1 = [{}];
dataset = [];
keys = Object.keys(data);
arr = Object.keys(data[keys[0]]);
for (i = 0; i < arr.length; i++) {
columns_1.push({
'title': arr[i],
});
}
for (i = 0; i < keys.length; i++) {
local_arr = [];
local_arr.push(keys[i]);
for (j = 0; j < arr.length; j++) {
local_arr.push(data[keys[i]][arr[j]]);
}
dataset.push(local_arr);
}
return dataset
}
function handleReportSuccess(data) {
var dataset = get_dataset(data);
datatable = $('#restaurant_number_table').DataTable({
data: dataset,
columns: columns_1
});
$('.reviews-cont').show();
}
Run Code Online (Sandbox Code Playgroud)
Here is …
我有一个模特:
class Order(models.Model):
STATUS_CHOICES = (
(100, 'First'),
(200, 'Second'),
)
status = models.IntegerField('Status', choices=STATUS_CHOICES)
def accept(self):
self.status = 200
self.save()
return self.status, self.get_status_display()
Run Code Online (Sandbox Code Playgroud)
我有一个单元测试:
class CustomTestCase(TestCase):
@classmethod
def setUp(self):
pass
@classmethod
def save(self):
pass
class OrderTest(CustomTestCase):
def test_accept(self):
result = Order.accept(self)
expected = (200, 'Second')
self.assertEqual(expected, result)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我添加了"保存"功能,什么都不做,原因是因为没有自定义'保存'功能,我不断收到此错误:
[OrderTest]对象没有属性[保存]
如果对自定义"保存"功能有更好的解决方案,请告诉我.但是这种解决方案不适用于django内置的'get_status_display()'函数.没有解决方案,我一直遇到这个麻烦:
[OrderTest]对象没有属性[get_status_display]
我可以做些什么才能让我的工作变得我需要?
我正在Django-REST-FrameWork上构建网站的后端,目前我具有以下结构(以下显然只是其中的一部分):
project_root:
apps:
app1:
models.py
serializers.py
views.py
urls.py
app2:
models.py
serializers.py
views.py
urls.py
urls:
urls.py - (Main project urls file)
Run Code Online (Sandbox Code Playgroud)
端点:
http://localhost:8000/api/app1/
http://localhost:8000/api/app2/
Run Code Online (Sandbox Code Playgroud)
如何添加版本控制?我应该为每个应用程序添加一个“ v2”文件夹吗?
楷模
class Task(Model):
employee_owner = ForeignKey(Employee, on_delete=CASCADE)
employee_doer = ForeignKey(Employee, on_delete=CASCADE)
Run Code Online (Sandbox Code Playgroud)
查看
class TaskViewSet(ModelViewSet):
serializer_class = TaskSerializer
queryset = Task.objects.all()
filter_class = TaskFilter
Run Code Online (Sandbox Code Playgroud)
过滤
class TaskFilter(FilterSet):
owner_id = NumberFilter(name='employee_owner__id')
doer_id = NumberFilter(name='employee_doer__id')
class Meta:
model = Task
fields = {
'owner_id',
'doer_id'
}
Run Code Online (Sandbox Code Playgroud)
端点
http://localhost:8000/api/tasks?owner_id=1&doer_id=1
Run Code Online (Sandbox Code Playgroud)
(只给那些任务,其中owner和doer是相同的员工)
http://localhost:8000/api/tasks?owner_id=1
Run Code Online (Sandbox Code Playgroud)
(仅给出owner特定员工和doer任何人的任务)
http://localhost:8000/api/tasks?doer_id=1
Run Code Online (Sandbox Code Playgroud)
(仅给出doer特定员工和owner任何人的任务)
我想要的是
我想要一个端点,如:
http://localhost:8000/api/tasks?both_id=1
Run Code Online (Sandbox Code Playgroud)
(这将给我以上3个端点的所有结果)
我想做django-filter过滤完全如下:
Task.objects.filter(
Q(employee_owner__id=1) | Q(employee_doer__id=1)
)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?谢谢.
例如,我有以下代码:
class FamilyMember(models.Model):
user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)
我有以下情况:
a1 = FamilyMember.objects.get(id=1)
a1.first_name = 'John'
a1.last_name = 'Smith'
(a1 is a parent of a2)
a2 = FamilyMember.objects.get(id=2)
a2.first_name = 'Mark'
a2.last_name = 'Smith'
(a2 is a child of a1 and parent of a3 in the same time)
a3 = FamilyMember.objects.get(id=3)
a3.first_name = 'Jason'
a3.last_name = 'Smith'
(a3 is a child of a2)
Run Code Online (Sandbox Code Playgroud)
如何在一个模型中完成这种关系?
我已经知道,我可以在同一模型中实现ForeignKey父子关系,从而可以与1个parent =多个孩子创建关系。但是,如何在同一模型中完成多对多关系?此刻,我编写并测试了这一点:
class Person(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
parents = models.ManyToManyField(
'self', blank=True
)
Run Code Online (Sandbox Code Playgroud)
它可以工作,但不像我预期的那样。它的作用是:
john = Person.objects.get(id=1)
sam = Person.objects.get(id=2)
>>> john.parents.all()
<QuerySet [<Person: Alex>, <Person: Peter>, <Person: Sam>]>
>>> sam.parents.all()
<QuerySet [<Person: John>]>
Run Code Online (Sandbox Code Playgroud)
如您所见,Sam应该是John的孩子,而不是他的孩子和父母。我想要的是在检索sam.parents.all()时得到约翰,但不是在检索john.parents.all()时得到山姆。
有没有办法实现我想要的?还是至少不能使用这种逻辑?我是否必须使用同一应用程序创建第二个单独的模型?
我有以下代码(它无用,仅用于性能测试)
class A:
def __init__(self, i):
self.i = i
start = datetime.now()
foo = {}
for i in range(10000000):
foo[i] = A(i)
print('\nSpent: [ {} ] seconds!'.format((datetime.now()-start).total_seconds()))
Run Code Online (Sandbox Code Playgroud)
事实是,当我用Python3.7运行它时,得到以下结果
Spent: [ 7.644764 ] seconds!
Run Code Online (Sandbox Code Playgroud)
但是当我用Python3.6运行它时
Spent: [ 6.521555 ] seconds!
Run Code Online (Sandbox Code Playgroud)
所以问题是,我是否会误解某些东西,还是旧版本的python速度更快,应该使用旧版本的python?
UPD:如评论中所建议,我使用了timeit模块,这里是结果
python3.7 -m timeit '"-".join(str(n) for n in range(2000000))'
1 loop, best of 5: 499 msec per loop
python3.6 -m timeit '"-".join(str(n) for n in range(2000000))'
10 loops, best of 3: 405 msec per loop
Run Code Online (Sandbox Code Playgroud)
的结果timeit对于3.7来说仍然不好,真的比3.6慢吗?
django ×5
python ×5
relationship ×2
rest ×2
datatables ×1
javascript ×1
jquery ×1
performance ×1
postman ×1
python-3.x ×1
unit-testing ×1