2013-03-13 4 views
1

У меня есть приложение, которое позволяет вам создать профиль. Одна из возможностей моего приложения - это позволить вам отредактировать свое имя и загрузить изображение.Django Ошибка отправки формы

Проблема заключается в том, что пользователь не может отправить изображение, если только он не наберет свое имя. Как я могу исправить эту страницу, чтобы сделать это, если пользователь отправил изображение, но не отправил имя. Он все равно будет иметь свое старое имя или если он не отправит изображение и не изменит свое имя. У него все еще будет его старая картина?

Я попытался добавлением пустого = True и нуля = False, нуля = True, но не похоже, чтобы сделать работу

Моим models.py

class Person(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100,null=True,blank=False) 
    image = models.FileField(upload_to="images/") 

    def __unicode__(self): 
     return self.name 

Моим forms.py

class PersonForm(forms.ModelForm): 
    class Meta: 
     model = Person 
     fields = ('image','name',) 

Мой views.py

def Display(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 

    if request.method == 'POST': 
     form = PersonForm(request.POST, request.FILES) 
     if form.is_valid(): 
      person = Person.objects.get(user=request.user) 
      person.image = form.cleaned_data['image'] 
      person.name = form.cleaned_data['name'] 
      person.save() 
    return render(request,'edit.html',{'form': PersonForm()}) 

enter image description here

+0

Вы удалили базу данных и синхронизировали снова после изменения поля имени? – catherine

+0

@catherine nope okay Я сделаю это сейчас, но catherine (max_length = 100, null = True, blank = False) прав? – donkeyboy72

+0

это CharField, поэтому '(max_length = 100, blank = True)' – catherine

ответ

2
class Person(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100, blank=True) 
    image = models.FileField(upload_to="images/", blank=True) 

    def __unicode__(self): 
     return self.name 

def Display(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 

    if request.method == 'POST': 
     form = PersonForm(request.POST, request.FILES) 
     if form.is_valid(): 
      image = form.cleaned_data['image'] 
      name = form.cleaned_data['name'] 

      person = Person.objects.get(user=request.user) 

      if image: 
       person.image = form.cleaned_data['image'] 
      if name: 
       person.name = form.cleaned_data['name'] 

      person.save() 
    return render(request,'edit.html',{'form': PersonForm()}) 
+0

О, ладно, спасибо, cathy, она отлично работает – donkeyboy72

1

Джанго формы делает проверку на данных пользователей

проверка выполняется на двух уровнях:

  1. уровень поля:

    • если поле является обязательным, и пользователь не вводит никаких данных, это приведет к ошибке
    • , если пользователь ввел неверно отформатированные данные для этого f IELD это вызовет ошибку
    • вы можете переопределить поведение проверки поля по реализации функций, названные в clean_fieldname
    • этого типа результатов проверки в form.field.errors
  2. уровень формы:

    • проверяет любые (не связанные с полем) ошибки проверки
    • вы можете переопределить поведение, применяя метод clean
    • этого типа результатов проверки в form.non_field_errors

из ваших моделей:

изображения не могут быть пустыми, что означает, что требуется.не входя в образ вызовет ошибку

пусть пустой = True для оба имени и изображений

я также рекомендую использовать form.save() над моделями экономии от взглядов

также есть встроенные в ImageField для сохранения изображений

+0

Благодарю вас также за помощь – donkeyboy72

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