Size: a a a

Django [ru] #STAY HOME

2021 March 16

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
Всем привет.

Подскажите как можно сделать стандартные поля модели нередактируемыми?

Что бы после записи в БД, некоторые поля были недоступны для изменений.
берешь переопределяешь def save в модели и если там прийдет тебе поле твоё нужное просто его не записуй и всё
источник

E

Eugene in Django [ru] #STAY HOME
Единственный вариант который сработал - переопределение метода save, или сигнала pre_save. Но это выглядит как костыли
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
Единственный вариант который сработал - переопределение метода save, или сигнала pre_save. Но это выглядит как костыли
метод save в модели, не костыль
источник

YK

Yegor Kowalew in Django [ru] #STAY HOME
Eugene
editable=False пробовал, но он только скрывает поля в админке, в коде через кверисеты поля всё так же изменяемы
ты боишься что какой-то программист ворвется и вместо тебя напишет код, который будет перезаписывать поля?
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Yegor Kowalew
ты боишься что какой-то программист ворвется и вместо тебя напишет код, который будет перезаписывать поля?
не, ему надо чтоб юзеры не смогли перезаписать поле
источник

YK

Yegor Kowalew in Django [ru] #STAY HOME
Anton Fircak
не, ему надо чтоб юзеры не смогли перезаписать поле
ну так просто выводить им его нередактируемым
источник

E

Eugene in Django [ru] #STAY HOME
Anton Fircak
не, ему надо чтоб юзеры не смогли перезаписать поле
Что бы через модель нельзя было изменить. В таблице важные данные, так что заказчик просит "максимально" защитить)
источник

E

Eugene in Django [ru] #STAY HOME
Было бы круто сделать это на уровне БД
источник

YK

Yegor Kowalew in Django [ru] #STAY HOME
в модели editable=False  в формах редонли филд
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
Что бы через модель нельзя было изменить. В таблице важные данные, так что заказчик просит "максимально" защитить)
то есть данные типо раз записываются и всё? нельяза перезаписать
источник

E

Eugene in Django [ru] #STAY HOME
Yegor Kowalew
в модели editable=False  в формах редонли филд
Не катит(
источник

YK

Yegor Kowalew in Django [ru] #STAY HOME
Eugene
Было бы круто сделать это на уровне БД
чтоб и сам в него не мог записать
источник

E

Eugene in Django [ru] #STAY HOME
Anton Fircak
то есть данные типо раз записываются и всё? нельяза перезаписать
Да, но не все, а некоторые поля
источник

E

Eugene in Django [ru] #STAY HOME
Yegor Kowalew
чтоб и сам в него не мог записать
++)
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
Да, но не все, а некоторые поля
а почему тебе не сделать типо констант? детали расскажешь?
источник

E

Eugene in Django [ru] #STAY HOME
Anton Fircak
а почему тебе не сделать типо констант? детали расскажешь?
поле в моделе JsonField
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
поле в моделе JsonField
пара ключ, значение в  jsonfield, а в плане бизнеса за что это поле отвечает
источник

E

Eugene in Django [ru] #STAY HOME
за хранение необработанных данных. Дальше происходит обработка этих данных в новые таблицы, но JSONField исходной таблицы остаётся нетронутым
источник

Б

Богдан in Django [ru] #STAY HOME
Как лучше реализовать свою модель закладок со множеством моделей?

Для того, чтобы хранить много разных моделей, можно использовать GenericForeignKey, но он не самый лучший вариант

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Bookmark(models.Model):
   user = models.ForeignKey(MyUser, verbose_name=u'bookmarks')
   content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
   object_id = models.PositiveIntegerField()
   content_object = GenericForeignKey('content_type', 'object_id’)


Как лучше сделать свою реализацию? сделать поле content_type charfield, в котором будет хранится строка, которая будет ключем к модели в словаре? Или можно сделать, чтобы в content_type хранилась ссылка на любую модель? что-то а-ля
content_type = models.MultipleForeignKey(AnyModel)
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Eugene
за хранение необработанных данных. Дальше происходит обработка этих данных в новые таблицы, но JSONField исходной таблицы остаётся нетронутым
типо туда раз записали новую запись и всё, на счет сделать это на уровне постгрес не скажу, а на уровне django orm просто переопределяешь save и если у тебя идет перезаписать created=False, то тогда удаляешь своё поле и всё
источник