недопустимый литерал для int() с основанием 10: ‘create_property’

#python #django

#питон #джанго

Вопрос:

Я получаю эту ошибку при использовании одного из моих представлений django. У меня есть 2 модели; Владелец и свойство. У владельца может быть много свойств. Модели такие, как показано ниже:

 class Owner(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    trading_name = models.CharField(max_length=100)
    phone = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    address = models.CharField(max_length=200)

    def __str__(self):
        return self.trading_name


class Property(models.Model):

    STYLE_CHOICES = [('Apart','Apartment'),
                        ('Bung','Bungalow'),
                        ('Mans','Mansionnete'),
                        ('Comm','Commercial'),
                    ]
    name = models.CharField(max_length=100)
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
    style = models.CharField(max_length=100, choices=STYLE_CHOICES)
    bedrooms = models.IntegerField()
    bathrooms = models.IntegerField()
    parking = models.BooleanField(default=True)
    sqft = models.IntegerField()
    address = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    image = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)


    def __str__(self):
        return self.name
 

Мои взгляды:

 def CreatePropertyView(request):
    if request.method == "POST":
        form = PropertyForm(request.POST)
        print(request.POST)
        if form.is_valid():
            property = form.save(commit=False)
            property.save()
            return redirect(reverse('properties'))
    return render(request, 'property_agency/property_form.html', {'form': PropertyForm(request.POST or None)})



def PropertyListView(request):
    properties = Property.objects.all()
    context = {
            'properties': properties
    }
    return render(request, 'property_agency/property_list.html', context=context)



def PropertyDetailView(request, property_id, *args, **kwargs):
    property = Property.objects.get(pk=property_id)
    units = PropertyUnit.objects.filter(property=property)
    context = {
        'property': property,
        'units': units
    }
    return render(request, 'property_agency/property_detail.html', context=context)
 

PropertyListView с url ‘properties’ работает просто отлично. Также PropertyDetailView работает нормально, однако, когда я перехожу к «properties / create_property», он отключается. Трассировка стека выделяет строку:

 property = Property.objects.get(pk=property_id)
 

моего PropertyDetailView как строки с проблемой. Это началось после возни с миграциями. Я попытался удалить базу данных и удалить миграции, но все же. Любые идеи, как это исправить, спасибо.

Моя конфигурация url:

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')),
    path('listings/', include('listings.urls')),
    path('accounts/', include('accounts.urls')),
    path('contacts/', include('contacts.urls')),
    path('owners/', agency_views.OwnersListView, name='owners'),
    path('owners/create_owner/', CreateOwnerView.as_view(), name='create_owner'),
    path('owners/<owner_id>/', agency_views.OwnerDetailView, name='owner_detail'),
    path('properties/', agency_views.PropertyListView, name='properties'),
    path('properties/<property_id>/', agency_views.PropertyDetailView, name='property_detail'),
    path('properties/create_property/', agency_views.CreatePropertyView, name='create_property'),
    path('properties/create_unit/', agency_views.CreateUnitView, name='create_unit'),
    path('tenants/', TenantListView.as_view(), name='tenants'),
    path('tenants/create_tenant/', CreateTenantView.as_view(), name='create_tenant'),
    path('realtors/', RealtorsListView.as_view(), name='realtors'),
    path('realtors/create_realtor/', RealtorCreateView.as_view(), name='create_realtor'),
]
 

и в моем html-шаблоне:

 <button type=""><a href="{% url 'create_property' %}">Create New Property</a></button>

<td><a href="{% url 'property_detail' property.id %}"><span class="badge badge-primary badge-pill">View</span></a></td>
 

Отслеживание стека:

 Traceback (most recent call last):
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/muhurijson/Desktop/mySuite/projects/grant_ventures/property_agency/views.py", line 57, in PropertyDetailView
    property = Property.objects.get(pk=property_id)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/query.py", line 399, in get
    clone = self.filter(*args, **kwargs)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/query.py", line 892, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/query.py", line 910, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1290, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1315, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1251, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1116, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/lookups.py", line 20, in __init__
    self.rhs = self.get_prep_lookup()
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/lookups.py", line 70, in get_prep_lookup
    return self.lhs.output_field.get_prep_value(self.rhs)
  File "/home/muhurijson/.local/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 966, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'create_property' 

Ответ №1:

Я полагаю, вы вызываете URL … properties/create_property/, и он попадает в строку выше, а ‘create_property’ используется как <property_id>

Я думаю, вы должны объявить его как int:

  ../<int:property_id>/
 
 path('properties/<property_id>/', agency_views.PropertyDetailView, name='property_detail'),
    path('properties/create_property/', agency_views.CreatePropertyView, name='create_property'),

 

Ответ №2:

Использовать

 path('properties/<int:property_id>/', agency_views.PropertyDetailView, name='property_detail'),
 

Так что пути, которые выглядят как properties/abc/ , не будут перенаправлены на ваш PropertyDetailView .

В общем, вы всегда должны перечислять пути с угловыми скобками после аналогичных путей без угловых скобок, потому что Django выбирает первое соответствующее правило маршрутизации.

Комментарии:

1. Приятно это слышать. Пожалуйста, примите мой ответ, нажав галочку под кнопками upvote / downvote, чтобы сообщить сайту и сообществу, что на ваш вопрос получен ответ!