Display a Model Field (CharField) as a Dynamic URL | Error: invalid literal for int() with base 10: ' '

Display a Model Field (CharField) as a Dynamic URL | Error: invalid literal for int() with base 10: ' '

我的目标是让“.com/listings/listing”中路径的 "listing" 部分成为动态 'address' 字段名为 "Listing" 的模型。 (“6226Bourbonais”是此问题的地址字段示例。)

所以我基本上是为了:.com/listings/6226Bourbonais

我已经成功获取模板显示,主键为url,目前是自动生成的ID,一个整数。 但是当我尝试对其进行逆向工程以显示列表模型的地址字段时,它给了我错误:

invalid literal for int() with base 10: '6226Bourbonais'

urls.py


    from django.urls import path

    from . import views

    urlpatterns = [
      path('', views.index, name='listings'),
      path('<str:listing_address>', views.listing, name='listing'),
      path('search', views.search, name='search'),
    ]

views.py


    def listing(request, listing_address):

      listing = get_object_or_404(Listing, id=listing_address)
      context = {
        'listing': listing,
      }
      return render(request, 'listings/listing.html', context)

models.py


    class Listing(models.Model): 

      agent = models.ForeignKey(Agent, on_delete=models.DO_NOTHING)
      title = models.CharField(max_length=200)
      address = models.CharField(max_length=
      year_built = models.IntegerField(default=1900)
      build_type = models.CharField(max_length=100)
      city = models.CharField(max_length=100)
      state = models.CharField(max_length=100)
      zipcode = models.CharField(max_length=20)

...(etc.)

listing.html 模板的标记片段

    {% if listings %}
              {% for listing in listings %}
              <div class="col s12 l4">
                  <a href="{% url 'listing' listing.address %}" class="">
                    <div class="card z-depth-2">
                      <div class="card-image">

虽然确实出现错误,但当我查看页面上的 URL 时,它是正确的。 "mysite.com/listings/6226Bourbonais" 所以我认为路由正在工作,但错误与 Django 不知道如何处理 str 和 int 有关。

我是 django 的新手,非常感谢您的帮助。 谢谢

您就快完成了:您只需要使用地址字段作为查找:

listing = get_object_or_404(Listing, address=listing_address)