Не может сохранить содержание формы к базе данных

Я пытаюсь сохранить 100 пользователей формы символов в 'микроблоге' минимальное приложение. Мой код, кажется, не имеет любые ошибки, но не работает. Ошибка находится в views.py, я не могу сохранить внешний ключ к пользовательской таблице.

models.py похож на это:

class NewManager(models.Manager):

    def create_post(self, post, username):
 new = self.model(post=post, created_by=username)
        new.save()
        return new

class New(models.Model):

    post = models.CharField(max_length=120)
    date = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User, blank=True) 
    objects = NewManager()   


class NewForm(ModelForm):

    class Meta:
          model = New
          fields = ['post']
         # widgets = {'post': Textarea(attrs={'cols': 80, 'rows': 20})

def save_new(request):

    if request.method == 'POST':
        created_by = User.objects.get(created_by = user) 
        date = request.POST.get('date', '')
        post = request.POST.get('post', '')
        new_obj = New(post=post, date=date, created_by=created_by)
        new_obj.save()
        return HttpResponseRedirect('/')
     else:
           form = NewForm()     
    return render_to_response('news/new_form.html', {'form': form},context_instance=RequestContext(request))  

Я не упоминал импорт здесь - они сделаны правильно, так или иначе. Моя ошибка находится в views.py. То, когда я пытаюсь сохранить его, говорит:

локальная переменная 'created_by' ссылаемый перед присвоением

Если я поместил created_py в качестве параметра сохранению нужно больше параметров. Это действительно странно.

5
задан Peter Mortensen 19 June 2010 в 16:21
поделиться

1 ответ

Вы не показываете полную трассировка, которая поможет точно отследить, где происходит ошибка. (Я подозреваю, что это не точный код, который вы используете, или это не настоящее сообщение об ошибке, потому что, как упоминает ребус, ошибка не соответствует коду.)

Однако пара указателей. Во-первых, похоже, вы не используете форму для сохранения. Если бы вы это сделали, вы, вероятно, не увидели бы эту ошибку. Вместо того, чтобы получать значения вручную из запроса, вы должны создать экземпляр формы, используя request.POST , а затем сохранить его. Кроме того, вы не проверяете, действительно ли форма действительна, прежде чем пытаться использовать ее значения. Вот что вам следует делать:

if request.method == 'POST':
    form = NewForm(request.POST)
    if form.is_valid():
        new_obj = form.save(commit=False)
        new_obj.created_by = request.user
        new_obj.save()
        return HttpResponseRedirect('/')
else:
    form = NewForm()
return render_to_response('news/new_form.html', {'form': form},
                          context_instance=RequestContext(request))  

Также обратите внимание, что ваш менеджер совершенно не важен - менеджер по умолчанию уже определяет метод create , который делает то же самое, что и ваш.

7
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: