Django在同一頁面編輯關聯對象的數據

問題描述:

在Django中,我們想在同一頁面編輯關聯對象的數據。如:
在博客的分類編輯頁中,新建或者修改該分類下的文章。

代碼如下:

from django.contrib import admin

from .models import Post, Category


# 在分類列表頁面增加編輯文章的功能: 定義文章的Inline
class PostInline(admin.TabularInline):  # StackedInline樣式不同
    # 要顯示編輯的字段, 其中Post的category字段不需要設置,它默認的值就是當前編輯的分類。
    fields = ('title', 'desc')  
    extra = 0  # 控制額外多幾個空白記錄
    model = Post


# Register your models here.
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    inlines = [PostInline, ]  # 添加文章的Inline
    list_display = ('name', 'status', 'is_nav', 'owner', 'created_time', 'post_count')
    fields = ('name', 'status', 'is_nav')

    # 展示該分類下有多少文章
    def post_count(self, obj):
        return obj.post_set.count()

    post_count.short_description = '文章數量'

    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(CategoryAdmin, self).save_model(request, obj, form, change)

	# 修改關聯對象Post的數據
    def save_formset(self, request, form, formset, change):
        """ 修改關聯對象Post的數據 """
        instances = formset.save(commit=False)
        for instance in instances:
            if not hasattr(instance, 'owner'):  # 防止誤修改其他文章的作者
                instance.owner = request.user  # 給Post的owner字段賦值
                instance.save()
        formset.save_m2m()

代碼分析:
因爲我們的文章作者默認是設置爲當前登錄的用戶,所以需要在CategoryAdmin中修改關聯對象Post的數據,即給文章的作者賦值。

 instance.owner = request.user  # 給Post的owner字段賦值
 instance.save()

結果如下:

分類的編輯頁面:
分類編輯頁面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章