开发者

Django User Fields on Models

I would like every model of my app to store the user that created its entries. What I did:

class SomeModel(models.Model):
    # ...
    user = models.ForeignKey(User, editable = False)

class SomeModelAdmin(admin.ModelAdmin):
    # ...
    def save_model(self, request, obj, form, change):
        # Get user from request.user and fill the field if entry not existing

My question: As there's an entire app for User authentication and history, is there an easy way (perhaps, more oriented or standardized) of using any feature of this app instead of doing the above procedure to every model?

Update:

Here's what I did. It looks really ugly to me. Please let me know if there's a clever way of doing it.

I extended all the models i wanted to have these fieds on models.py:

class ManagerLog(models.Model):
    user = models.ForeignKey(User, editable = False)
    mod_date = models.DateTimeField(auto_now = True, editable = False, verbose开发者_如何学Python_name = 'última modificação')
    class Meta:
        abstract = True

In admin.py, I did the same with the following class:

def manager_log_save_model(self, request, obj, form, change):
    obj.user = request.user
    return obj

Then, I also need to to override save_model on every extended model:

class ExtendedThing(ManagerLogAdmin):
    # ...
    def save_model(self, request, obj, form, change):
        obj = manager_log_save_model(self, request, obj, form, change)
        # ... other stuff I need to do here


more easy way,use save_model

class MyAdmin(admin.ModelAdmin):
    ...
    def save_model(self, request, obj, form, change):
        if getattr(obj, 'author', None) is None:
            obj.author = request.user
        obj.save()

see:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model


I think you should check out the django packages section on versioning. All those apps will track changes to your model, who made those changes and when.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜