繁体   English   中英

为什么我的 function 没有通过 url 中的 slug 返回 object?

[英]Why is my function not returning the object by its slug in the url?

'edit_holiday() 得到了一个意外的关键字参数 'slug'

我希望在单击 object 时,它的 slug 返回到我在模型中自动设置的 url 中,与名称相同。

models.py 中的 Function:

@receiver (post_save, sender = Holiday)
def insert_slug(sender, instance, **kwargs):
    if not instance.slug:
        instance.slug = slugify(instance.HolidayReason)
        return instance.save()

我的 views.py 可视化 object:

def edit_holiday(request, pk):
    if request.method == 'GET':
        objeto = Holiday.objects.filter(slug=pk).first()
        
        if objeto is None:
            return redirect(reverse('lista_holiday'))
        
        holiday_list = Holiday.objects.get(slug=pk)
        form = HolidayForm(instance=objeto)
        
        form_holidaycenter_factory = inlineformset_factory(Holiday, HolidayCenter, form=HolidayCenterForm)
        form_holidayloc_factory = inlineformset_factory(Holiday, HolidayLoc, form=HolidayLocForm)
        form_holidaycenter = form_holidaycenter_factory(instance=objeto, prefix='holidaycenter')
        form_holidayloc = form_holidayloc_factory(instance=objeto, prefix='holidayloc')
        
        context = {
            'form': form,
            'form_holidaycenter ': form_holidaycenter,
            'form_holidayloc ': form_holidayloc ,
            'holiday_list ': feriado_list,
        }
        
        return render(request, '../templates/feriado/form_.html', context)
    
    elif request.method == 'POST':
        objeto = Holiday.objects.filter(slug=pk).first()
        
        if objeto is None:
            return redirect(reverse('lista_holiday'))
        
        holiday_list = Holiday.objects.get(slug=pk)
        form = HolidayForm(request.POST, instance=objeto)
        
        form_holidaycenter_factory = inlineformset_factory(Holiday, HolidayCenter, form=HolidayCenterForm)
        form_holidayloc_factory = inlineformset_factory(Holiday, HolidayLoc, form=HolidayLocForm)
        form_holidaycenter = form_holidaycenter_factory(request.POST, instance=objeto, prefix='holidaycenter')
        form_holidayloc = form_holidayloc_factory(instance=objeto, prefix='holidayloc')
        
        
        if form.is_valid() and form_holidayloc .is_valid() and form_holidaycenter.is_valid():
            holiday= form.save()
            form_holidayloc.instance = holiday
            form_holidaycenter.instance = holiday
            form_holidayloc.save()
            form_holidaycenter.save()
            
            messages.success(request, "Feriado adicionado com sucesso!")
            return redirect(reverse('lista_holiday'))
        
        else: 
            context = {
                'form': form,
                'form_holidaycenter ': form_holidaycenter,
                'form_holidayloc ': form_holidayloc ,
                'holiday_list ': feriado_list,
            }
            
            return render(request, '../templates/feriado/form_holiday.html', context)

我的网址.py:

from django.urls import path
from . import views
from django.contrib.auth.decorators import login_required
from .views import ListaFeriadoView, adicionar_feriado, editar_feriado, ExcluirFeriadoView
from . import views

urlpatterns = [
   path('lista_holiday/', login_required(ListaFeriadoView.as_view()), name='lista_holiday'),
   path('cadastrar_holiday/', login_required(views.adicionar_holiday), name='cadastrar_holiday'),
   path('edit_holiday/<slug:slug>/', login_required(views.edit_holiday), name='edit_holiday'),
   path('excluir_holiday/<slug:slug>', login_required(ExcluirFeriadoView.as_view()), name='excluir_feriado'),
]

但是发生了这个错误: /feriado/edit_holiday/descobrimento-brasil/ edit_holiday() 的 TypeError got an unexpected keyword argument 'slug'

我想你需要编辑 views.py 如下:

def edit_holiday(request, pk):
    if request.method == 'GET':
        objeto = Holiday.objects.filter(slug, pk).first()
        
        if objeto is None:
            return redirect(reverse('lista_holiday'))
        
        holiday_list = Holiday.objects.get(slug =  pk) # invalid argument
        form = HolidayForm(instance=objeto)
        
        form_holidaycenter_factory = inlineformset_factory(Holiday, HolidayCenter, form=HolidayCenterForm)
        form_holidayloc_factory = inlineformset_factory(Holiday, HolidayLoc, form=HolidayLocForm)
        form_holidaycenter = form_holidaycenter_factory(instance=objeto, prefix='holidaycenter')
        form_holidayloc = form_holidayloc_factory(instance=objeto, prefix='holidayloc')
        
        context = {
            'form': form,
            'form_holidaycenter ': form_holidaycenter,
            'form_holidayloc ': form_holidayloc ,
            'holiday_list ': feriado_list,
        }
        
        return render(request, '../templates/feriado/form_.html', context)
    
    elif request.method == 'POST':
        objeto = Holiday.objects.filter(slug, pk).first()
        
        if objeto is None:
            return redirect(reverse('lista_holiday'))
        
        holiday_list = Holiday.objects.get(slug= pk) # invalid argument
        form = HolidayForm(request.POST, instance=objeto)
        
        form_holidaycenter_factory = inlineformset_factory(Holiday, HolidayCenter, form=HolidayCenterForm)
        form_holidayloc_factory = inlineformset_factory(Holiday, HolidayLoc, form=HolidayLocForm)
        form_holidaycenter = form_holidaycenter_factory(request.POST, instance=objeto, prefix='holidaycenter')
        form_holidayloc = form_holidayloc_factory(instance=objeto, prefix='holidayloc')
        
        
        if form.is_valid() and form_holidayloc .is_valid() and form_holidaycenter.is_valid():
            holiday= form.save()
            form_holidayloc.instance = holiday
            form_holidaycenter.instance = holiday
            form_holidayloc.save()
            form_holidaycenter.save()
            
            messages.success(request, "Feriado adicionado com sucesso!")
            return redirect(reverse('lista_holiday'))
        
        else: 
            context = {
                'form': form,
                'form_holidaycenter ': form_holidaycenter,
                'form_holidayloc ': form_holidayloc ,
                'holiday_list ': feriado_list,
            }
            
            return render(request, '../templates/feriado/form_holiday.html', context)

而且,您需要在object.get()更改参数 2 次,因为slug不是 function object.get()的有效参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM