【问题标题】:How to know the value of pk in django models如何知道 django 模型中 pk 的值
【发布时间】:2018-08-15 19:31:50
【问题描述】:

我现在正在学习 Django,我想用我的“数据库”和每行信息的 id/pk 获取一个表。现在我有这个:

型号:

class Car(HistoryBase):
plate = models.CharField(max_length=6, default='', verbose_name="Placa")
year = models.CharField(max_length=4, null=True, blank=True, default='', verbose_name="Año del auto")
model = models.CharField(max_length=20, null=True, blank=True, default='', verbose_name="Modelo del auto")
brand = models.CharField(max_length=20, null=True, blank=True, default='', verbose_name="Marca del auto")
color = models.CharField(max_length=20, null=True, blank=True, default='', verbose_name="Color del auto")

表格:

from ..core.forms import BootstrapModelForm
from .models import Car


class CarModelForm(BootstrapModelForm):
    class Meta:
      model = Car
      fields = '__all__'

查看:

from django.views.generic.edit import CreateView
from .models import Car
from .forms import CarModelForm

class CarDetailView(CreateView):
template_name = "cars_detail.html"
http_method_names = [u'get', u'post', ]
form_class = CarModelForm
model = Car
success_url = '/autos/{}'

def _get_car(self, *args, **kwargs):
    try:
        pk = int(self.kwargs.get('pk'))
        return Car.objects.get(pk=pk)
    except Exception:
        return None

模板:

<div class="col-sm-12">
  <div class="card">
    <div class="card-body">
      <div class="card-title"><h2>Listado de Autos</h2></div>
      <hr>
      <table id="tabla" class="table table-striped table-bordered" cellspacing="0" width="100%">
        <thead>
          <tr>
            <th>Numero</th>
            <th>Placa</th>
            <th>Marca</th>
            <th>Modelo</th>
            <th>Color</th>
          </tr>
        </thead>
        <tbody>
          {% for object in object_list %}
          <tr>
            **<td>{{ object.object_instance.pk }}</td>**
            <td>{{ object.plate }}</a></td>
            <td>{{ object.brand }}</td>
            <td>{{ object.model }}</td>
            <td>{{ object.color }}</td>
          </tr>
          {% endfor %}
        </tbody>
      </table>
    </div>
  </div>      
</div>

当我去 chrome 查看表格时,“numero”或 ID 列是空白的,请帮忙:)

【问题讨论】:

  • 只是{{ object.pk }}。我很好奇你为什么认为它会是object.object_instance.pk
  • 但这并没有多大意义。该视图似乎与模板无关;它不发送汽车列表,_get_car 方法毫无意义,从未调用过。
  • 您将视图命名为 CarDetailView,但它是 CreateView。最好把它命名为CarCreateView
  • @guillermochamorro:不,可能是相反的:它看起来像一个列表视图

标签: python django docker django-models


【解决方案1】:

pk 只是Model 实例的一个属性,所以你可以这样写:

&lt;td&gt;{{ object<b>.pk</b> }}&lt;/td&gt;

对象毕竟是一个模型实例。因此,.pk 属性是由“Django 逻辑”添加的。

话虽如此,您可能应该修复您的 Django CreateView(这也很奇怪,因为这看起来更像是 ListView)。 _get_car(..) 在这里 - 乍一看 - 从未调用过。自从你写了model=...,逻辑就发生了。

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2020-06-16
    • 2014-10-14
    相关资源
    最近更新 更多