0

错误图像

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

网址.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"),

]

视图.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")

管理员.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)

模型.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
4

1 回答 1

0

您有以下条目CandidateAdmin.fieldsets

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

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

("URL", {'fields': ["candidate_slug"]}),
于 2019-12-29T17:27:59.420 回答