4

しばらくデバッグした後、エラーが何であるかを見つけましたが、それを修正する方法がわかりません。

  • ver_caja引数としてcajaオブジェクトのIDを受け取り、ジェネリックを呼び出す名前''のurlConfがありますobject_detail
  • クエリセットは正しいです。すべてのcajaオブジェクトを正しく取得してください。
  • テンプレートには、次のような呼び出しがあります。 {% ver_caja caja.id %}
  • オブジェクトcajaはテンプレートによって正しく受信されます。
  • MySQLを使用しています。

問題は、caja.idが「1」ではなく「1L」であるということです。

1Lurlconf(ver_caja)は英数字ではなく整数を待機するため、これによりエラーが発生します' ' <int>L

django docsサイトで取得したすべての情報はこれです(チュートリアルの例として)、それは役に立ちません:

...

>>> p = Poll(question="What's up?", pub_date=datetime.datetime.now())

# Save the object into the database. You have to call save() explicitly.
>>> p.save() 

# Now it has an ID. Note that this might say "1L" instead of "1", depending 
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
>>> p.id

...

では、これを修正して、caja.id=1代わりに受信するようにするにはどうすればよいcaja.id=1Lですか?

前もって感謝します。

ペドロ

編集:ここにすべてのファイルがあります。

テンプレートエラー:

レンダリング中に例外が発生しました:引数'(1L、)'およびキーワード引数'{}'が見つからない'ver_caja_chica'のリバース。

caja / models.py

class Caja(models.Model):
    slug = models.SlugField(blank=True)
    nombre = models.CharField(max_length=20)
    saldo = models.DecimalField(max_digits=10, decimal_places=2)
    detalle = models.TextField(blank=True, null=True)

    # apertura
    fechahora_apert = models.DateTimeField(default=datetime.datetime.now, auto_now_add=True)
    usuario_apert = models.ForeignKey(Usuario, related_name=u'caja_abierta_por', help_text=u'Usuario que realizó la apertura de la caja.')

    # cierre
    fechahora_cie = models.DateTimeField(blank=True, null=True)
    usuario_cie = models.ForeignKey(Usuario, null=True, blank=True, related_name=u'caja_cerrada_por', help_text=u'Usuario que realizó el cierre de la caja.')

    def __unicode__(self):
        return u'%s,  $%s' % (self.nombre, self.saldo)

    class Meta:
        ordering = ['fechahora_apert']


class CajaChica(Caja):
    dia_caja = models.DateField(default=datetime.date.today, help_text=u'Día al que corresponde esta caja.')
    cerrada = models.BooleanField(default=False, help_text=u'Si la caja está cerrada no se puede editar.')

caja / urls.py

cajas_chicas = {
    'queryset': CajaChica.objects.all(),
}

urlpatterns = patterns('',
    url(r'^$', 'django.views.generic.list_detail.object_list', dict(cajas_chicas, paginate_by=30), name="lista_cajas_chicas"),
    url(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', dict(cajas_chicas, ), name="ver_caja_chica"),
)

cajachica_list.html

...
<table>
{% for obj in object_list %}
<tr class="{% cycle 'row1' 'row2' %}">
    <td>{{ obj.nombre|capfirst }}</td>
    <td>{{ obj.fechahora_apert|timesince }}</td>
    <td>{{ obj.usuario_apert }}</td>
    <td>{{ obj.saldo }}</td>
    <td><a href="{% url ver_caja_chica obj.pk %}">Ver / Editar</a></td>
</tr>
{% endfor %}
</table>
...

編集 -2(目的で)間違ったurlconfを使用すると、これらはこのアプリのURLです:

... 
4. ^caja/$ ^$ 
5. ^caja/$ ^(?P<object_id>\d+)/$ 
... 

たぶん、最終的なURLはdjangoによって間違って作成されています。

これらのURLはcaja/urls.py内にあり、プロジェクトのルートディレクトリからurls.pyに含まれています。

いくつかの手がかり?

4

2 に答える 2

8

このURL構成をプライマリURL構成に実際に接続しましたか?

プロジェクトで、次のurls.pyようなものがあることを確認します。

urlpatterns = patterns('',
    #...
    url(r'^cajas/', include('caja.urls')),
)
于 2009-11-22T22:14:19.587 に答える
2

問題は、あなたが思っていることとはまったく異なります。引数はとして表示される'(1L,)'ため、タプルの値は整数ですが、長いものであり、文字列ではなく、として表示され'('1L',)'ます。(Lの説明は、投稿したコードへのコメントに示されています)。

実際、問題は、URLが名前のない位置引数ではなく、名前の付いたキーワード引数を予期していることです。これは、正規表現グループに次の名前を付けたためです(?P<object_id>\d+)。したがって、urlタグは次のようになります。

{% url ver_caja_chica object_id=obj.pk %}
于 2009-11-22T20:30:09.827 に答える