2017-09-14 80 views
0

我有這個更新視圖,但它不會保存表單提交。 5分鐘前,一切工作正常,然後我添加了用戶帖子的編輯功能,突然沒有任何東西會保存在試圖編輯的東西。Django更新視圖不​​會保存

用戶應用的觀點:

class UserEditProfileView(LoginRequiredMixin,UpdateView): 
    login_url = '/login/' 
    model = UserProfile 
    fields = [ 
      'first_name', 
      'profile_pic', 
      'location', 
      'title', 
      'user_type', 
      'website', 
      'about', 
      'twitter', 
      'dribbble', 
      'github' 
      ] 
    template_name_suffix = '_edit_form' 

    def get_success_url(self): 
     userid = self.kwargs['pk'] 
     return reverse_lazy('users:user_profile',kwargs={'pk': userid}) 

用戶應用模式:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

    first_name = models.CharField(max_length=50,default='User') 
    join_date = models.DateTimeField(default=timezone.now) 
    profile_pic = models.ImageField(upload_to='profile_pics',null=True,blank=True) 
    location = models.CharField(max_length=150) 
    title = models.CharField(max_length=250) 
    user_type = models.IntegerField(choices=USER_TYPE_CHOICES,default=1) 
    website = models.URLField(max_length=100,blank=True) 
    about = models.TextField(max_length=500,default='about') 
    twitter = models.CharField(max_length=50,blank=True) 
    dribbble = models.CharField(max_length=50,blank=True) 
    github = models.CharField(max_length=50,blank=True) 

    @receiver(post_save, sender=User) 
    def create_user_profile(sender, instance, created, **kwargs): 
     if created: 
      UserProfile.objects.create(user=instance) 

    @receiver(post_save, sender=User) 
    def save_user_profile(sender, instance, **kwargs): 
     instance.userprofile.save() 

    def __str__(self): 
     return self.user.username 

用戶profile_edit_form.html:

{% extends "users/base.html" %} 

{% block content %} 

    <div class="form-title"> 
     <h2 class="form-title-text">Edit Profile</h2> 
    </div> 

    <div class="user-forms-base"> 
     <form method="POST"> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit" value="Save" /> 
     </form> 
</div> 

{% endblock %} 

我有上家更新的帖子同樣的問題頁面,但我假設問題是相同的,所以我將能夠複製此解決方案 那裏。

+1

您可以嘗試重寫'form_invalid'等方法來打印和調試發送的內容,查看(可能)使表單失效並因此保存數據。 – Evert

+0

您可以在settings.py中使用Debug = False運行它並提供回溯.. – johnashu

+0

建議不要在模型模塊或應用程序模塊中定義Django Signals,將它們放在外面,即在類的外部定義'@ receiver' – deaspo

回答

0

有人在評論中提到了這一點,但基本上這個表單是有效返回的,所以我重寫form_invalid來打印可能導致它的任何錯誤。這表明它在模型級別期望int發送string。一旦我切換回發送一個int問題就消失了,現在它可以工作。多謝你們。