Python Django. No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model
Всем привет. Столкнулся с проблемой, которую не могу решить. В моделях прописаны get_absolute_url, но почему-то получаю ошибку: "No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model." Вот код (models.py):
class Vendor(models.Model):
name = models.CharField(max_length=255, default='')
vendor_type = models.ForeignKey('VendorType', on_delete=models.PROTECT, null=False)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse_lazy('motherboard_vendors')
class VendorType(models.Model):
class Type(models.IntegerChoices):
MOTHERBOARD = 1, 'Материнская плата'
CPU = 2, 'Процессор'
STORAGE = 3, 'Накопитель памяти'
VIDEOCARD = 4, 'Видеокарта'
RAM = 5, 'Оперативная память'
MONITOR = 6, 'Монитор'
SOFTWARE = 7, 'Программное обеспечение'
PROJECTOR = 8, 'Проектор'
PRINTER = 9, 'Принтер'
name = models.CharField(choices=Type.choices, max_length=255, default='')
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse_lazy('motherboards')
forms.py:
class AddMotherboardVendorForm(forms.ModelForm):
class Meta:
model = Vendor
fields = ['name']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-input'}),
}
def clean_name(self):
name = self.cleaned_data['name']
if len(name) > 50:
raise ValidationError("Длина превышает 50 символов")
return name
def save(self):
vendor = super().save(commit=False)
vendor.vendor_type_id = VendorType.Type.MOTHERBOARD
vendor.save()
return vendor.get_absolute_url()
views.py:
class AddMotherboardVendor(LoginRequiredMixin, CreateView):
form_class = AddMotherboardVendorForm
template_name = "home/motherboard/addmotherboardvendor.html"
title_page = 'Добавление производителя материнской платы'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = self.title_page
return context
urls.py:
path('motherboard_vendors/add_motherboard_vendor/', views.AddMotherboardVendor.as_view(), name='add_motherboard_vendor')
Раньше была другая сущность Vendor:
class MotherboardVendor(models.Model):
motherboard_vendor_name = models.CharField(max_length=255, default='')
def __str__(self):
return self.motherboard_vendor_name
def get_absolute_url(self):
return reverse_lazy('motherboard_vendors')
Но, как только я её заменил, сразу начала вылетать ошибка: "No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.". Пробовал удалять базу с миграциями и заново создавать, но ничего нового не увидел. Пересоздавал полностью проект, тоже не помогло. На всех других моделях, где стоит get_absolute_url - всё работает корректно. Может кто сталкивался с таким, и подскажет, в чём проблема?
К форме AddMotherboardVendorForm пробовал добавлять def get_success_url(), но получал ту же ошибку