Я успешно реализовал django-taggit, пока не попытался использовать миксин для рендеринга тегов в ListView «PropertyListing» в этом примере:
Консоль постоянно говорит мне:
NameError: name 'Tag' is not defined
** ПРОБЛЕМА происходит из строки 4 views.py.
Я не могу импортировать «Tag» из модели, как «PropertyListing», поскольку это сторонняя библиотека.
Я попытался импортировать
from taggit.managers import TaggableManager
в views.pyно та же ошибка.
Я использую django 2.1 и django-taggit 1.1.0
ниже приведен код:
models.py
from taggit.managers import TaggableManager
class City(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True)
tags = TaggableManager()
class Meta:
verbose_name_plural = 'Cities'
def __str__(self):
return self.name
class PropertyListing(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField(max_length=1000)
address = models.CharField(max_length=1000)
is_active = models.BooleanField(default=False)
city = models.ForeignKey(City, on_delete=models.CASCADE, related_name='property_listings')
class Meta:
verbose_name_plural = 'Properties Listings'
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(PropertyListing, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('core:property_detail', kwargs={'pk': self.pk})
views.py
class TagMixin(object):
def get_context_data(self, **kwargs):
context = super(TagMixin, self).get_context_data(**kwargs)
context['tags'] = Tag.objects.all()
return context
class PropertyListingView(TagMixin, ListView):
model = City
model_type = PropertyImage
queryset = PropertyListing.objects.all()
context_object_name = 'properties'
template_name = 'core/property-listing.html'
def get_context_data(self, *args, **kwargs):
context = super(PropertyListingView, self).get_context_data(**kwargs)
context['cities'] = City.objects.all()
context['properties'] = PropertyImage.objects.select_related('image_property_listing')
return context
class CityTaggedView(TagMixin, ListView):
model = City
context_object_name = 'cities'
template_name = 'core/city-tagged.html'
def get_queryset(self):
return City.objects.filter(tags__slug=self.kwargs.get('slug'))
urls.py
path('', PropertyListingView.as_view(), name='property_listing'),
path('tag/<slug:slug>/', CityTaggedView.as_view(), name='city_tagged')
Любая помощь будет принята с благодарностью.Я не понимаю, почему это происходит.