2009-04-15 9 views
37

Ok, vì vậy đây là gầy:thao tác dữ liệu trong bảng quản trị của Django vào Save

# models.py 
class Article(models.Model): 
    title   = models.CharField(max_length = 255) 
    author   = models.ForeignKey(User) 
    published_at = models.DateTimeField(auto_now_add = True) 
    body   = models.TextField() 

    def __unicode__(self): 
     return self.title 

# admin.py 
from hpccoe.news.models import Article 
from django.contrib import admin 
from django import forms 
from django.forms import widgets 

class ArticleAdminForm(forms.ModelForm):  
    title = forms.CharField(max_length = 255, required = True) 
    body = forms.CharField(required = True, widget = widgets.Textarea) 

class ArticleAdmin(admin.ModelAdmin): 
    fields = [ 'title', 'body' ] 
    form = ArticleAdminForm 

admin.site.register(Article, ArticleAdmin) 

Như bạn thấy, tôi bỏ qua lĩnh vực tác giả theo hình thức quản trị. Tôi muốn, bằng cách nào đó, tự động điền vào trước khi nó được lưu. Làm thế nào để tôi thực hiện điều đó? Tôi đã ở trên Google trong một giờ qua không có kết quả.

Xin cảm ơn trước.

Trả lời

58

Từ Django Docs:

ModelAdmin.save_model(self, request, obj, form, change) 

Phương pháp save_model được cho HttpRequest, một mô hình ví dụ, một trường hợp ModelForm và một giá trị boolean dựa vào việc nó được thêm hoặc thay đổi các đối tượng. Tại đây bạn có thể thực hiện bất kỳ thao tác nào trước hoặc sau khi lưu.

Ví dụ để đính kèm request.user đến đối tượng trước khi tiết kiệm:

class ArticleAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change): 
     obj.user = request.user 
     obj.save() 
+0

làm thế nào để làm bài-tiết kiệm hoạt động? nó không được nêu trong tài liệu – samix73

+1

Nhận xét cũ. Chỉ cần trả lời ở đây để cập nhật SO @ samix73: Lý tưởng nhất là bạn nên sử dụng Super để gọi lớp cơ sở save_model và thực hiện sau đó. Sẽ đăng đoạn mã nếu cần. – Shrey

15
class ArticleAdmin(admin.ModelAdmin): 
    fields = [ 'title', 'body' ] 
    form = ArticleAdminForm 

    def save_model(self, request, obj, form, change): 
     obj.author = "name Here" 
     obj.save()