Django通过外键链接2个表

2024-09-28 05:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Django开始,我正在尝试制作一个应用程序,将订单链接到客户,让用户能够点击客户并查看该客户已经下了哪些订单

问题是,每个教程都会使用命令提示符或管理屏幕手动执行这些链接,我需要从代码中自动获得它们。这段代码就是我在Orden表单中使用的代码。我发现了两个错误,第一个是404错误,ordenfill页面未找到,这是在我单击guardar按钮后发生的,我想这是因为在我单击guardar按钮后,表单无效,正在尝试访问没有“nombre”参数的ordenfill URL,但我不确定。如果我从视图和URL中删除nombre参数,那么我不知道如何获取该名称并将表单链接到该名称,404错误将停止,但我从未获得有效表单,因为系统告诉我需要客户端字段

这些是模型

class Cliente(models.Model):
    nombre = models.CharField(max_length=100)
    email = models.EmailField(max_length=50)
    direccion = models.CharField(max_length=100, default='direccion')

    class Meta:
        db_table = 'datosclientes'


class Orden(models.Model):
    num_orden = models.CharField(max_length=20, default='')
    instrumento = models.CharField(max_length=30, default='')
    marca = models.CharField(max_length=20)
    serial = models.CharField(max_length=15, default='')
    abono = models.CharField(max_length=15, default='')
    client = models.ForeignKey(Cliente, on_delete=models.CASCADE, default='')

    class Meta:
        db_table = 'datos_ordenes'

这是表格

from django import forms
from clientesapp.models import Cliente, Orden


class clienteForm(forms.ModelForm):
    class Meta:
        model = Cliente
        fields = '__all__'


class ordenForm(forms.ModelForm):
    class Meta:
        model = Orden
        fields = '__all__'

这是关联的视图

def ordenfill(request, nombre):
    cliente = Cliente.objects.get(nombre=nombre)
    if request.method == 'POST':
        orden = ordenForm(request.POST)
        orden.client = cliente
        if orden.is_valid():
            init = orden.save()
            return redirect('ordenview', id=init.id)

    else:
        orden = ordenForm()
    return render(request, 'ordenfill.html', {'orden': orden})

这是相关的前端:

<body>

     {% block content %}
         <form method="POST" class="post-form" action="/ordenfill/">
            {% csrf_token %}
            <div class="container">
                <br>

                <div class="form-group row">
                    <label class="col-sm-1 col-form-label"></label>
                        <div class="col-sm-4">
                            <h3>Ingrese los Datos</h3>
                        </div>
                </div>
                <div class="form-group row">
                    <label class="col-sm-1 col-form-label">Cliente</label>
                        <div class="col-sm-4">
                            {{orden.client.nombre}}
                        </div>
                </div>
                <div class="form-group row">
                    <label class="col-sm-2 col-form-label">Orden</label>
                    <div class="col-sm-4">
                        {{orden.num_orden}}
                    </div>
                </div>
                .
                .
                .
                <div class="form-group row">
                    <label class="col-sm-2 col-form-label"></label>
                    <div class="col-sm-4">
                        <button type="submit" class="btn btn-primary">Guardar</button>
                    </div>
                </div>
             </div>
         </form>
     {% endblock %}
</body>

以下是URL:

from django.contrib import admin
from django.urls import path, include
from clientesapp import views as cv
from register import views as v

urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', cv.home, name="home"),
    path('update/<int:id>', cv.update, name="clupdate"),
    path('ordenfill/<str:nombre>', cv.ordenfill, name="ordenfill"),
    path('ordenview/<int:id>', cv.ordenview, name="ordenview"),
    path('', include("django.contrib.auth.urls")),
]

编辑:

这是URL和具有“nombre”参数的视图的错误:
Error with the parameter

这是没有参数的错误:
Error without the parameter


Tags: pathdivformmodelscollengthlabelmax

热门问题