ModelChoiceField object has no attribute 'to_field_name' - Python

Узнай цену своей работы

Формулировка задачи:

Делаю форму, где одно из полей - поле для выбора одного из вариантов (select). Варианты - значения из БД одной из моделей. В БД внес 14 наименований для модели blog_cat.
Листинг программы
  1. class blog_cat(models.Model):
  2. class Meta():
  3. db_table = "blog_Категории"
  4. blog_cat_name = models.CharField(unique=True, max_length=300, verbose_name="Название", help_text="Название")
  5. def __str__(self):
  6. return self.blog_cat_name
  7. class blogs(models.Model):
  8. class Meta():
  9. db_table = "Блоги,рецепты,советы"
  10. blogs_title = models.CharField(max_length=300, verbose_name="Название Блога", help_text="Название Блога")
  11. blogs_cat = models.ForeignKey(blog_cat, verbose_name="Категория")
  12. blogs_user = models.ForeignKey(AuthUser, null=True, blank=True)
  13. blogs_date = models.DateTimeField(default=timezone.now())
  14. blogs_text = models.TextField(max_length=113000, null=True, blank=True, verbose_name="Текст", help_text="Текст")
  15. blogs_like = models.IntegerField(default=0, verbose_name="Лайки", null=True, blank=True)
  16. blogs_looks = models.IntegerField(default=0, verbose_name="Просмотров", null=True, blank=True)
  17. def __str__(self):
  18. return self.blogs_title
forms
Листинг программы
  1. class BlogForm(forms.ModelForm):
  2. class Meta():
  3. model = blogs
  4. fields = ['blogs_title', 'blogs_cat', 'blogs_text']
  5. widgets = {
  6. 'blogs_title': forms.TextInput(attrs={'placeholder': 'Название', 'max_length': '313'}),
  7. 'blogs_cat': forms.ModelChoiceField(queryset=blog_cat, empty_label=None, to_field_name="blog_cat_name"),
  8. 'blogs_text': forms.Textarea(attrs={'placeholder': 'Текст', 'cols': 50, 'rows': 15}),
  9. }

Выдает ошибку:

AttributeError at / 'ModelChoiceField' object has no attribute 'to_field_name' Traceback
Листинг программы
  1. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\core\handlers\base.py in get_response
  2. resolver_match = resolver.resolve(request.path_info) ...
  3. ? Local vars
  4. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\core\urlresolvers.py in resolve
  5. for pattern in self.url_patterns: ...
  6. ? Local vars
  7. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\core\urlresolvers.py in url_patterns
  8. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) ...
  9. ? Local vars
  10. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\core\urlresolvers.py in urlconf_module
  11. self._urlconf_module = import_module(self.urlconf_name) ...
  12. ? Local vars
  13. C:\Python34\lib\importlib\__init__.py in import_module
  14. return _bootstrap._gcd_import(name[level:], package, level) ...
  15. ? Local vars
  16. C:\Python34\nato4ka\nato4ka\urls.py in <module>
  17. from blogs import urls ...
  18. ? Local vars
  19. C:\Python34\nato4ka\blogs\urls.py in <module>
  20. from blogs.views import * ...
  21. ? Local vars
  22. C:\Python34\nato4ka\blogs\views.py in <module>
  23. from blogs.forms import * ...
  24. ? Local vars
  25. C:\Python34\nato4ka\blogs\forms.py in <module>
  26. class BlogForm(forms.ModelForm): ...
  27. ? Local vars
  28. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in __new__
  29. opts.help_texts, opts.error_messages) ...
  30. ? Local vars
  31. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in fields_for_model
  32. formfield = f.formfield(**kwargs) ...
  33. ? Local vars
  34. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\db\models\fields\related.py in formfield
  35. return super(ForeignKey, self).formfield(**defaults) ...
  36. ? Local vars
  37. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\db\models\fields\related.py in formfield
  38. return super(RelatedField, self).formfield(**defaults) ...
  39. ? Local vars
  40. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\db\models\fields\__init__.py in formfield
  41. return form_class(**defaults) ...
  42. ? Local vars
  43. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in __init__
  44. self.queryset = queryset ...
  45. ? Local vars
  46. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in _set_queryset
  47. self.widget.choices = self.choices ...
  48. ? Local vars
  49. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\fields.py in _set_choices
  50. value = list(value) ...
  51. ? Local vars
  52. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in __iter__
  53. yield self.choice(obj) ...
  54. ? Local vars
  55. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in choice
  56. return (self.field.prepare_value(obj), self.field.label_from_instance(obj)) ...
  57. ? Local vars
  58. C:\Python34\lib\site-packages\django-1.8.3-py3.4.egg\django\forms\models.py in prepare_value
  59. if self.to_field_name: ...
  60. ? Local vars
Листинг программы
  1. forms.ModelChoiceField(queryset=blog_cat.objects.all(), ....)
проблема осталась та же...

Решение задачи: «ModelChoiceField object has no attribute 'to_field_name'»

textual
Листинг программы
  1. class BlogForm(forms.ModelForm):
  2.     class Meta():
  3.         model = blogs
  4.         blogs_cat = forms.ModelChoiceField(queryset=blog_cat.objects.all(), empty_label=None, to_field_name="blog_cat_name")
  5.         fields = ['blogs_title', 'blogs_cat', 'blogs_text']
  6.         widgets = {
  7.             'blogs_title': forms.TextInput(attrs={'placeholder': 'Название', 'max_length': '313'}),            
  8.             'blogs_text': forms.Textarea(attrs={'placeholder': 'Текст', 'cols': 50, 'rows': 15}),
  9.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут