Получить текущего пользователя для поля "made_by" в классе модели

В настоящее время я работаю над приложением Django и пытаюсь установить текущего пользователя по умолчанию для модели, но это не работает.

created_by = models.ForeignKey(User, default=request.user, null=True, blank=True, on_delete=models.DO_NOTHING, related_name='created_by')

Я пытался переопределить метод save(), но он тоже не работает, у кого-нибудь есть опыт по этому вопросу?

Большое спасибо заранее за вашу помощь

3 ответа

Решение

Обратитесь к официальному документу. Это объяснило это довольно хорошо. Пример тоже есть

from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)

https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-editing/

Если ваша модель выглядит следующим образом: model.py

      class Post(models.Model):
   title = models.CharField(max_length=500)
   created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null= True)

В классе администратора модели в admin.py добавьте следующий метод

      class PostAdmin(admin.ModelAdmin):
    readonly_fields = ('created_by',)
    list_display = ('title', 'created_by')

    def save_model(self, request, obj, form, change):
        if obj.id == None:
           obj.created_by = request.user
           super().save_model(request, obj, form, change)

        else:

           super().save_model(request, obj, form, change)


admin.site.register(Post, PostAdmin)

Если кто-то сталкивался с этой проблемой, я последовал совету a_k_v и сделал это во взглядах. Вот как я это сделал:

Я добавил два поля в своем классе:

class Class(models.Model):
    created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, blank=True, null=True, related_name='create')
    updated_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, blank=True, null=True, related_name='update')

затем создал функцию:

def created_updated(model, request):
    obj = model.objects.latest('pk')
    if obj.created_by is None:
        obj.created_by = request.user
    obj.updated_by = request.user
    obj.save()

чтобы получить его в мои views.py:

    if request.method == 'POST':
    form = AddVacation(request.POST)
    if form.is_valid:
        form.save()
        created_updated(Vacation, request)
Другие вопросы по тегам