let originalString = "http://www.ihtc.cc?name=htc&title=iOS开发工程师"
1. encodingQuery:
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
результат:
"http://www.ihtc.cc?name=htc&title=iOS%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88"
2. encodingURL:
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
результат:
"http:%2F%2Fwww.ihtc.cc%3Fname=htc&title=iOS%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88"
Прежде всего, абсолютно не используйте IntegerFields для этих значений. Это внешние ключи, вы должны использовать поле ForeignKey. Они должны называться user
и client
- обратите внимание, что вы по-прежнему можете получить доступ к базовым идентификаторам, как и раньше.
(Кроме того, нет необходимости явно объявлять поле id
; вам почти никогда не следует переопределять __init__
в модели, но особенно нет никакой точки, переопределяющей метод, который вызывает только супер метод. Просто удалите это.)
class AccessLevel(models.Model):
user = models.ForeignKey('Users', null=False, blank=False)
client = models.ForeignKey('Client', null=False, blank=False)
class Users(models.Model):
client = models.ForeignKey('Client', null=False, blank=False)
Теперь, для вашей реальной проблемы, идентификатор назначается базой данных, что происходит только после сохранения. Таким образом, вы должны создать связанный элемент после этого.
def save(self, *args, **kwargs):
super(Users, self).save(*args, **kwargs)
AccessLevel(user_id=self.id,
client_id=self.client_id).save(using='default')
print('Access Level Set for User while saving')
Другим способом создания элемента, который может быть немного более понятным, является использование средства доступа, предоставляемого внешним ключом:
self.accesslevel_set.create(client_id=self.client_id)
Наконец, это, вероятно, лучше, чем [117 ] сигнал после сохранения , а не в методе сохранения.