我有一个视图,该视图用于GET和POST到不是默认数据库的数据库。
class DeployResourceFilterView(generics.ListAPIView):
serializer_class = ResourceSerializer
def get(self, request, format=None):
resname = self.request.GET.get('name')
queryset = Resmst.objects.db_manager('Admiral').filter(resmst_name=resname)
serializer = ResourceSerializer(queryset)
if queryset:
return Response(serializer.data)
else:
raise Http404
def post(self, request, format=None):
serializer = ResourceSerializer(data=request.DATA, many=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
GET可以正常工作,但在POST上,它总是会抱怨表不存在而不断失败。我的假设是这样做的原因是因为它试图使用默认数据库,而不是我定义为辅助数据库的“海军上将”数据库。如何分配POST以使用特定数据库而不是默认数据库?
我试图找到解决方案,无法理解我做错了什么.
在我的Linux服务器上,我运行了以下命令:
ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)
这生成了一个id_rsa和id_rsa.pub文件.
然后我在本地复制它们并尝试运行以下代码:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('myserver', username='myuser', key_filename='id_rsa')
sftp = ssh.open_sftp()
sftp.chdir('/path/to/file')
sftp.get(file, os.path.join(tmp_dir, '{0}.existing-{1}'.format('myfile', current_datetime)))
except Exception, err:
logging.debug(err)
logging.info('Error connecting to Host')
Run Code Online (Sandbox Code Playgroud)
我在日志中收到以下错误:
2017-08-22 22:41:54,486 Switch to new keys ...
2017-08-22 22:41:54,502 Adding ssh-ed25519 host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:41:54,502 Trying key 7688e32d30edb2c94bfe39be9897004f from id_rsa
2017-08-22 22:41:54,532 userauth is OK
2017-08-22 22:41:54,549 Authentication (publickey) failed.
2017-08-22 22:41:54,563 not a valid OPENSSH private key file
2017-08-22 22:41:54,563 Error …Run Code Online (Sandbox Code Playgroud) 这里有一个类似的问题 - 原始查询必须包含主键
但是,我正在运行旧版数据库,因此无法弄清楚主键的问题.
这是我的RAW查询 -
trg = Trgjob.objects.db_manager('AdmiralDEV').raw("""
SELECT jobdep_id, jm.jobmst_id, jobdep_type, (jm1.jobmst_prntname + '\' + jm1.jobmst_name) AS jobdep_jobmst,
jobdep_operator, jobdep_status, jobdep_joblogic, jobdep_ingroup, jobdep_dateoffset, jobdep_instoffset,
jobdep_canignore, jobdep_filename, jobdep_filetype, jobdep_fileextent, nodmst_id, varmst_id, jobdep_value
FROM Jobdep jd
INNER JOIN Jobmst jm ON jd.jobmst_id = jm.jobmst_id
INNER JOIN Jobmst jm1 ON jd.jobdep_jobmst = jm1.jobmst_id
WHERE jm.jobmst_id = 9878""")
Run Code Online (Sandbox Code Playgroud)
在DB工作正常,但在Django我得到以下失败 -
原始查询必须包含主键
这个模型的主键是"jobdep_id",如下所示在models.py中 -
class Jobdep(models.Model):
jobdep_id = models.IntegerField(primary_key=True)
Run Code Online (Sandbox Code Playgroud) 我有以下内容-
obj.owner_id = Owner.objects.filter(owner_name=owner_obj).values_list('owner_id')[0]
Run Code Online (Sandbox Code Playgroud)
问题在于它返回的值是一个元组。具体来说-
(786,)
Run Code Online (Sandbox Code Playgroud)
我要返回的只是整数值或786。
我究竟做错了什么?
我想这样做 -
word = 'hello'
if 'a' or 'c' in word:
continue
elif 'e' in word:
continue
else:
continue
Run Code Online (Sandbox Code Playgroud)
只有在我没有或者它时它才有用.字符串是一个单词.
我正在尝试使用以下序列化程序进行嵌套写入 -
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('company', 'is_admin', 'last_modified', 'uuid')
class UserSerializer(serializers.ModelSerializer):
profile = UserProfileSerializer()
class Meta:
model = User
fields = ('url', 'username', 'email', 'profile')
def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
for profile_data in profile_data:
UserProfile.objects.create(user=user, **profile_data)
return user
Run Code Online (Sandbox Code Playgroud)
但是在发完一篇文章后,我得到了以下回溯——
Traceback:
File "/opt/enterpass_app/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/enterpass_app/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/opt/enterpass_app/lib/python2.7/site-packages/rest_framework/viewsets.py" in view
87. return self.dispatch(request, *args, **kwargs)
File "/opt/enterpass_app/lib/python2.7/site-packages/rest_framework/views.py" in …Run Code Online (Sandbox Code Playgroud) 我正在做一个简单的列表视图,其中当前返回如下所示 -
[
{
"name": "John",
"description": "John's Group",
"owner": 1
}
]
Run Code Online (Sandbox Code Playgroud)
问题是我不想要那个整数,我希望它像这样显示 -
[
{
"name": "John",
"description": "John's Group",
"owner": "John Smith"
}
]
Run Code Online (Sandbox Code Playgroud)
我发现的解决这个问题的唯一方法是做一个像这样的序列化器 -
class ClassListSerializer(serializers.ModelSerializer):
ownername = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'ownername')
Run Code Online (Sandbox Code Playgroud)
问题是我不想将该字段更改为ownername.
在模型中设置以下内容适用于模型的传统查询 -
def __str__(self):
return self.username
Run Code Online (Sandbox Code Playgroud)
但我猜因为 DRF 的读取方式不同,它不遵守外键映射并返回?
这样做是行不通的,因为它试图覆盖已经存在的内容owner-owner
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')
Run Code Online (Sandbox Code Playgroud)
那么如何让它显示名称而不是整数呢?
$path = "\path\to\my\file"
Run Code Online (Sandbox Code Playgroud)
我想简单地删除第一个\我该怎么做?
如果第一个字符是字母,我不想删除它,除非它是\
我正在努力迁移一些遗留代码,Perl 适合以下几行:
$message =~ s/_WIP_list{file}_/$WIP_list{$file}/g;
$message =~ s/_STD_list{file}_/$STD_list{$file}/g;
Run Code Online (Sandbox Code Playgroud)
我应该如何编写它们以避免弃用错误?
有人可以解释如何获取与 dsquery 返回的相同的 ObjectGUID(除了使用 powershell 之外)吗?
举个例子。
电源外壳
Get-ADGroup "MyGroup" -Properties ObjectGUID
32359aec-2e77-4b0c-b525-3e9a39083314
Run Code Online (Sandbox Code Playgroud)
dsquery(应用程序使用 DSQuery 没有它使用的命令)
7Jo1MncuDEu1JT6aOQgzFA==
Run Code Online (Sandbox Code Playgroud)
编辑 - 为了清楚起见,我想在 powershell 中查询 AD 组并获取 ObjectGUID 的 DSQuery 结果。我不想要 ObjectGUID 的 powershell 结果。