[英]How can i modify admin form to get keywords in function of category
我像4天前一樣開始使用Django,所以我只是制作了一個基本的博客應用來測試某些功能,然后嘗試為我的文章添加一些類別,為我的類別添加一些關鍵字。
-開發
--- Django
-C ++
- -蟒蛇
-故事
- -涼
- -傷心
因此,這並不難,但是現在我試圖修改我的管理表單以在主要類別的功能中建議關鍵字,而我不知道這樣做的熱門之處
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.