簡體   English   中英

如何修改管理表單以獲取類別功能中的關鍵字

[英]How can i modify admin form to get keywords in function of category

我像4天前一樣開始使用Django,所以我只是制作了一個基本的博客應用來測試某些功能,然后嘗試為我的文章添加一些類別,為我的類別添加一些關鍵字。

例如:

-開發
--- Django
-C ++
- -蟒蛇
-故事
- -涼
- -傷心

因此,這並不難,但是現在我試圖修改我的管理表單以在主要類別的功能中建議關鍵字,而我不知道這樣做的熱門之處

models.py

from django.db import models
from django.template.defaultfilters import slugify
from django.contrib.auth.models import User

# Create your models here.

class Category(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

class Keyword(models.Model):
    name = models.CharField(max_length=30)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Article(models.Model):
    STATUS_CHOICES = (
        ("d", "Draft"),
        ("p", "Published"),
        ("o", "Offline"),
        #Sheduled?
    )

    title = models.CharField(max_length=100)    
    slug = models.SlugField(blank=True, editable=False)
    content = models.TextField(null=True)
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default="d")
    date_published = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de parution")
    date_modified = models.DateTimeField(auto_now_add=False, auto_now=True, verbose_name="Dernière modification")

    category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
    keywords = models.ManyToManyField('Keyword') #TODO: Give only tags in function of category

    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)#, blank=True, editable=False) #TODO: Set author automaticaly when creating article
    #TODO: Add illustration on mainpage

    def __str__(self):
        return self.title

    def save(self):
        self.slug = slugify(self.title)
        super(Article, self).save()

管理員

from django.contrib import admin
from django import forms

from blog.models import Category, Keyword, Article


class ArticleAdminForm(forms.ModelForm):
    """
        Query specific keywords in function of the main Category
    """
    class Meta:
        model = Article
        fields = ["title", "category", "keywords"]
    def __init__(self, *args, **kwargs):
        super(ArticleAdminForm, self).__init__(*args, **kwargs)
        self.fields["keywords"].queryset = Keyword.objects.filter(category=Article.objects.get(title="This is an article").category)


class ArticleAdmin(admin.ModelAdmin):
    form = ArticleAdminForm
    filter_horizontal = ("keywords", )


    ###############
    #CHANGE STATUS#
    ###############
    def set_published(self, request, queryset):
        rows_updated = queryset.update(status='p')
        if rows_updated == 1:
            message_bit = "1 story was"
        else:
            message_bit = "%s stories were" % rows_updated
        self.message_user(request, "%s successfully marked as published." % message_bit)
    def set_offline(self, request, queryset):
        rows_updated = queryset.update(status='o')
        if rows_updated == 1:
            message_bit = "1 story was"
        else:
            message_bit = "%s stories were" % rows_updated
        self.message_user(request, "%s successfully marked as offline." % message_bit)

    #################
    #DISPLAY_SETTINGS
    #################

    list_display    = ("title", "author", "status", "category", "date_published", "date_modified")
    list_filter     = ("author", "category", "keywords", )
    date_hierarchy  = ("date_published")
    ordering        = ("-date_published", )
    search_field    = ("title", "content")

    fieldsets = (
        ("Genéral",{
            "classes": ["wide"],
            "fields": ("title", "author", "category", "keywords")
        }),
        ("Article content",{
            "description": "This form takes HTML tags. Think about it!",
            "fields": ("content", )
        }),
    )
    actions = ["set_published", "set_offline"]
    set_published.short_description = "Mark selected stories as published"
    set_offline.short_description = "Mark selected stories as offline"

class KeywordAdmin(admin.ModelAdmin):

    list_display    = ("name", "category")
    list_filter     = ("category", )
    ordering        = ("category", )
    search_field    = ("category", "name")

    fieldsets = (
        ("Add a keyword", {
            "fields": ("category", "name")
        }),
    )


admin.site.register(Category)
admin.site.register(Keyword, KeywordAdmin)
admin.site.register(Article, ArticleAdmin)

注意:

我也嘗試過這個但是idk如何使其工作...

好的,所以我繼續在其他網站上搜索某些信息(以及其他stackoverflow主題),終於找到了一種在表單類中訪問文章數據的方法。
所以,如果有人像我那樣落在這里

#in admin.py
self.fields["keywords"].queryset = Keyword.objects.filter(category=Article.objects.get(id=self.instance.id).category)

注意:

在第一篇文章中,我想識別帶有標題的文章,但是我意識到很多年以來我都會有相同名稱的文章,所以現在我檢查文章ID巫婆是否唯一

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM