Django Models, Сбор моделей. Номер AutoField при переопределении метода save ()

Swift 3:

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"
0
задан ViaTech 16 January 2019 в 16:05
поделиться

1 ответ

Прежде всего, абсолютно не используйте 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 ] сигнал после сохранения , а не в методе сохранения.

0
ответ дан Daniel Roseman 16 January 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: