Я хочу добавить поля 'created_by' и 'modified_by' в мои модели Django, Как мне это сделать?
Моя пользовательская модель пользователя в account.models.py
:
class MyRegistration(AbstractBaseUser, PermissionsMixin):
location_list=[
('abc', 'abc'),
('def', 'def'),
]
username=models.CharField(max_length=10, unique=True)
email=models.EmailField(unique=True)
first_name=models.CharField(max_length=150)
last_name=models.CharField(max_length=150)
location=models.CharField(max_length=10, choices=location_list, default=None)
designation=models.CharField(max_length=70)
is_active=models.BooleanField()
is_staff=models.BooleanField(default=False)
start_date=models.DateTimeField(default=timezone.now)
last_login=models.DateTimeField(null=True)
USERNAME_FIELD='username'
REQUIRED_FIELDS=['email', 'first_name', 'last_name', 'location', 'designation']
objects=FirstManager()
def __str__(self):
return self.username
Модель в sample.models.py
:
class LockData(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE, default=None)
patient_type=models.ForeignKey(PatientType, on_delete=CASCADE, default=None, blank=True, null=True)
lock=models.BooleanField(default=False)
date=models.DateField(default=datetime.date.today)
created_on=models.DateTimeField(auto_now_add=True)
modified_on=models.DateTimeField(auto_now=True)
Итак, наряду с полями created_on
и modified_on
мне также нужны поля 'created_by' и 'modified_by'. Как я могу это сделать?
Начнем с функциональных представлений. Предположим, что у вас есть форма, которая была передана в представление для создания новой модели:
def create_lock_data(request):
if request.method == "POST":
form = lock_data_create_form(request.POST)
if form.is_valid():
form.instance.created_by = request.user
form.instance.modified_by = request.user
form.save()
else:
form=lock_data_create_form()
#...render template etc
Подобным образом, в представлении редактирования
def edit_lock_data(request, lock_id):
lock = get_object_or_404(LockData, pk = lock_id)
if request.method == "POST":
form = data_lock_edit_form(request.POST, instance=lock)
if form.is_valid():
form.instance.modified_by = request.user
form.save()
else:
form=lock_data_edit_form()
#...render template etc
Если вы используете представления на основе классов, вам просто нужно поместить содержимое условной формы form.is_valid() в функцию form_valid(), не забывая при этом использовать self при обращении к запросу, например,
def form_valid(self, form):
form.instance.created_by = self.request.user #only use for create
form.instance.modified_by = self.request.user
return super().form_valid(form)