2015-06-07 4 views
1

Когда я пытаюсь добавить данные в Faculty модели через панель администратора, загрузив фото дает мне ошибку:TypeError: Объект класса типа не имеет LEN()

TypeError at /admin/institute/faculty/add/
object of type 'Department' has no len()

models.py:

MEDIA_ROOT_IMAGES = 'images/' 

    def __get_path_faculty__(instance, filename): 
     upload_dir = os.path.join(MEDIA_ROOT_IMAGES,instance.dept,'Faculty') 
     if not os.path.exists(upload_dir): 
      os.makedirs(upload_dir) 
     return os.path.join(upload_dir, filename) 

    class Department(models.Model): 
     dept_code = models.CharField(unique=True, max_length = 2, primary_key = True, blank = False) 
     ..... 

    class Faculty(models.Model): 
     name = models.CharField(max_length = 50, blank = False) 
     dept = models.ForeignKey(Department, blank=False) 
     photo = models.ImageField(upload_to = __get_path_faculty__, default = 'null') 
     ..... 
     faculty_id = models.CharField(unique=True, max_length =100, editable = False) 
     def save(self, *args, **kwargs): 
      if not self.faculty_id: 
       self.faculty_id = self.email_off.split('@')[0] 
      super(Faculty,self).save(*args,**kwargs) 

views.py:

def faculty(request,dept_code): 
     dept_code1 = dept_code[:2].upper() 
     try: 
      dept = Department.objects.get(dept_code = dept_code1) 
      context_dict['Department'] = dept 
     except: 
      raise Http404 
     try: 
      faculties = Faculty.objects.filter(dept=dept_code1) 
      context_dict['Faculties'] = faculties 

     except: 
      raise Http404 
     return render(request,'faculty.html',context_dict) 

Traceback:

File "C:\Users\shiva\Anaconda\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\contrib\admin\options.py" in wrapper 
    616.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\utils\decorators.py" in _wrapped_view 
    110.      response = view_func(request, *args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func 
    57.   response = view_func(request, *args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\contrib\admin\sites.py" in inner 
    233.    return view(request, *args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\contrib\admin\options.py" in add_view 
    1516.   return self.changeform_view(request, None, form_url, extra_context) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\utils\decorators.py" in _wrapper 
    34.    return bound_func(*args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\utils\decorators.py" in _wrapped_view 
    110.      response = view_func(request, *args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\utils\decorators.py" in bound_func 
    30.     return func.__get__(self, type(self))(*args2, **kwargs2) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\utils\decorators.py" in inner 
    145.      return func(*args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\contrib\admin\options.py" in changeform_view 
    1467.     self.save_model(request, new_object, form, not add) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\contrib\admin\options.py" in save_model 
    1078.   obj.save() 
File "C:\Users\shiva\Documents\GitHub\iitbhu - Copy (3)\src\institute\models.py" in save 
    130.   super(Faculty,self).save(*args,**kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\base.py" in save 
    710.      force_update=force_update, update_fields=update_fields) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\base.py" in save_base 
    738.    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\base.py" in _save_table 
    822.    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\base.py" in _do_insert 
    861.        using=using, raw=raw) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\manager.py" in manager_method 
    127.     return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\query.py" in _insert 
    920.   return query.get_compiler(using=using).execute_sql(return_id) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql 
    970.    for sql, params in self.as_sql(): 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\sql\compiler.py" in as_sql 
    928.     for obj in self.query.objs 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\fields\files.py" in pre_save 
    315.    file.save(file.name, file, save=False) 
File "C:\Users\shiva\Anaconda\lib\site-packages\django\db\models\fields\files.py" in save 
    90.   name = self.field.generate_filename(self.instance, name) 
File "C:\Users\shiva\Documents\GitHub\iitbhu - Copy (3)\src\institute\models.py" in __get_path_faculty__ 
    17.  upload_dir = os.path.join(MEDIA_ROOT_IMAGES,instance.dept,'Faculty') 
File "C:\Users\shiva\Anaconda\lib\ntpath.py" in join 
    66.   p_drive, p_path = splitdrive(p) 
File "C:\Users\shiva\Anaconda\lib\ntpath.py" in splitdrive 
    114.  if len(p) > 1: 

Exception Type: TypeError at /admin/institute/faculty/add/ 
Exception Value: object of type 'Department' has no len() 
+0

Можете ли вы поделиться тем, что это - отделом = models.ForeignKey (отдел, пустой = False) в основном функция models.ForeignKey() –

+0

Я связывающая две модели 'Department' и' Faculty' с ' первичный ключ' 'Департамента', т.е.' dept_code', как 'ForeignKey', на модель« Faculty ». –

+0

Я имел в виду совместное использование функций моделей. ForeignKey в вашем вопросе –

ответ

1

Это линия вызывает ошибку:

upload_dir = os.path.join(MEDIA_ROOT_IMAGES,instance.dept,'Faculty') 

instance.dept является экземпляром Department. Вероятно, вам нужен код отдела. Это было бы доступно с instance.dept.dept_code.

+0

Спасибо! Это сделал трюк. :) –

0

Вы получаете эту ошибку, так как нет функции len(), определенной в классе Department. И, похоже, вы пытаетесь сделать .len() по экземпляру класса Department.

+0

Исправьте меня, если я ошибаюсь. Я фактически создаю экземпляр класса «Факультет». Plz предлагает, что бы вы хотели, чтобы я сделал. Я новичок в этом! –

Смежные вопросы