2013-02-12 3 views
0

Я хотел бы создать собственный метод сохранения для модели, которая объединяет значения из двух других полей, одним из которых является значение, хранящееся в отношении внешнего ключа.Пользовательский метод сохранения на модели - поля объединения

Например, с учетом этой модели:

class Post(models.Model): 
    text = charfield() 
    date = datefield() 
    user = ForeignKey(other model) 
    key = integerfield() 
    unique = charfield() 

Я хотел бы быть в состоянии сохранить поле под названием уникальный в виде комбинации как имя пользователя пользователя из внешнего ключа и ключевого поля, которое является автоматически увеличивающимся целым полем. Что-то вроде этого возможно? Я искал похожие вопросы, но не смог найти их.

ответ

0

Дело в том, что у вас не будет ключа, пока вы не сохранили модель хотя бы один раз. Таким образом, вашему методу сохранения нужно будет вызвать суперкласс, сохранить ключ, установить уникальное поле, а затем сохранить снова.

0

Вы можете использовать сигнал Джанго post_save для изменения данных после первого сохранения

Должно быть что-то вроде этого:

from django.db.models.signals import post_save 
@receiver(post_save, sender=Post) 
def my_handler(sender, **kwargs): 
    obj = kwargs['instance'] 
    obj.unique = obj.user + str(obj.key) 
    obj.save() 

Doc сигналов: https://docs.djangoproject.com/en/dev/topics/signals/