【问题标题】:I am unable to add category urls in my Post我无法在我的帖子中添加类别网址
【发布时间】:2020-04-18 15:47:28
【问题描述】:

Error Image

当我尝试添加 Candidate_slug 的 Url 时,出现以下错误: Unknown field(s) (category_slug) specified for Candidate。检查 CandidateAdmin 类的字段/字段集/排除属性 添加候选按钮 当我从管理员中删除网址时,我无法在我的系列上添加类别,并且我无法在主页上显示的类别之后进入系列

urls.py

from django.urls import path, include
from . import views

app_name = 'main'

urlpatterns = [
    path("", views.homepage, name="homepage"),
    path("signup/", views.signup, name="signup"),
    path("login/", views.login_request, name="login"),
    path("logout", views.logout_request, name="logout"),
    path("profile/", views.profile, name="profile"),
    path("account/", views.account, name="account"),
    path("<single_slug>", views.single_slug, name="single_slug"),

]

views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Candidate, CandidateCategory, CandidateSeries
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from .forms import NewUserForm


# Code for Showing(rendering) Homepage
def homepage(request):
    return render(request=request,
                  template_name="main/categories.html",
                  context={'categories': CandidateCategory.objects.all})


# Code for showing profiles section
def profile(request):
    return render(request,
                  "main/profile.html",
                  )


def single_slug(request, single_slug):
    categories = [c.category_slug for c in CandidateCategory.objects.all()]
    if single_slug in categories:
        matching_series = CandidateSeries.objects.filter(candidate_category__category_slug=single_slug)
        series_urls = {}

        for m in matching_series.all():
            part_one = Candidate.objects.filter(candidate_series__candidate_series=m.candidate_series).earliest("candidate_published")
            series_urls[m] = part_one.candidate_slug

        return render(request=request,
                      template_name='main/category.html',
                      context={"candidate_series": matching_series, "part_ones": series_urls})

    categories = [ca.candidate_slug for ca in Candidate.objects.all()]
    if single_slug in categories:
        this_candidate = Candidate.objects.get(candidate_slug=single_slug)
        candidates_from_series = Candidate.objects.filter(candidate_series__candidate_series=this_candidate.candidate_series).order_by('candidate_published')
        this_candidate_idx = list(candidates_from_series).index(this_candidate)

        return render(request,
                      "main/candidate.html",
                      {'candidates': this_candidate,
                       'sidebar': candidates_from_series,
                       'this_cat_idx': this_candidate_idx})


# Code for account
def account(request):
    return render(request,
                  "main/account.html",
                  )


# Code for Signing up for a new account
# this code also checks it the user already exists then it will throw the user already exists popup error message
def signup(request):
    if request.method == "POST":
        form = NewUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f"New account created: {username}")
            login(request, user)
            return redirect("main:homepage")
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")

            return render(request,
                          "main/signup.html",
                          {'form': form})

    form = NewUserForm
    return render(request=request,
                  template_name="main/signup.html",
                  context={'form': form})


# Code for Logging in a user
# it also authenticates if this user is valid or invalid
def login_request(request):
    if request.method == "POST":
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, f"You are now Logged in as {username}")
                return redirect('/')
            else:
                messages.error(request, f"Invalid Username of Password")
        else:
            messages.error(request, f"Invalid Username of Password")

        return render(request,
                      "main/login.html",
                      {'form': form})

    form = AuthenticationForm
    return render(request,
                  "main/login.html",
                  {'form': form})


# This code is simply for logging out a user
def logout_request(request):
    logout(request)
    messages.info(request, f"User Logged out Successfully!!!")
    return redirect("main:homepage")

admin.py

from django.contrib import admin
from .models import Candidate, CandidateSeries, CandidateCategory
from django.db import models
from tinymce.widgets import TinyMCE


class CandidateAdmin(admin.ModelAdmin):
    fieldsets = [
        ("Title/date", {'fields': ["candidate_name", "candidate_published"]}),
        ("URL", {'fields': ["category_slug"]}),
        ("Series", {'fields': ["candidate_series"]}),
        ("Content", {'fields': ["candidate_content"]}),
    ]

    formfield_overrides = {
        models.TextField: {'widget': TinyMCE()},
        }


admin.site.register(CandidateSeries)
admin.site.register(CandidateCategory)
admin.site.register(Candidate, CandidateAdmin)

models.py

from django.db import models
from datetime import datetime


class CandidateCategory(models.Model):
    candidate_category = models.CharField(max_length=200)
    category_summary = models.CharField(max_length=200)
    category_slug = models.CharField(max_length=200, default=1)

    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.candidate_category


class CandidateSeries(models.Model):
    candidate_series = models.CharField(max_length=200)
    candidate_category = models.ForeignKey(CandidateCategory, default=1, verbose_name="Category", on_delete=models.SET_DEFAULT)
    series_summary = models.CharField(max_length=200)

    class Meta:
        verbose_name_plural = "Series"

    def __str__(self):
        return self.candidate_series


class Candidate(models.Model):
    candidate_name = models.CharField(max_length=200)
    candidate_content = models.TextField()
    candidate_published = models.DateTimeField('date published', default=datetime.now())
    candidate_series = models.ForeignKey(CandidateSeries, default=1, verbose_name="Series", on_delete=models.SET_DEFAULT)
    candidate_slug = models.CharField(max_length=200, default=1)

    def __str__(self):
        return self.candidate_name

【问题讨论】:

    标签: django django-models django-admin django-admin-tools django-admin-actions


    【解决方案1】:

    您在CandidateAdmin.fieldsets中有以下条目

    ("URL", {'fields': ["category_slug"]}),
    

    Candidate 模型没有category_slug 字段,这应该是

    ("URL", {'fields': ["candidate_slug"]}),
    

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多