2

我目前正在开发一个 Django 应用程序,我正在尝试将当前用户设置为模型的默认用户,但它不起作用。

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

我试图覆盖 save() 方法,但它也不起作用,有人有这方面的经验吗?

非常感谢您的帮助

4

3 回答 3

4

参考官方文档。它解释得很好。也有一个例子

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/#models-and-request-user

于 2018-10-18T10:35:59.697 回答
1

如果有人遇到这个问题,我会按照 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)
于 2018-10-18T13:58:48.020 回答
0

如果您的模型如下 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)
于 2022-01-22T10:44:51.563 回答