Приложение Django включает обозначения кодирования в строках при сохранении записей базы данных

#django #encoding

#django #кодирование

Вопрос:

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

Подводя итог, это проблема:
Начальное состояние: поле заголовка записи — FooBar
Желаемое состояние: Поле заголовка записи — FooBar2
Что я получаю вместо этого: поле заголовка записи — (u’Foobar2’,)
Эти маркеры кодирования распечатываются в моем приложении Django, и я подтвердил, что они также присутствуют, когда я обращаюсь к базе данных непосредственно из оболочки Python (как в следующем примере)

 >>>entry.title
u"(u'FooBar2',)"
  

Есть идеи, почему моя форма и представление сохраняют эти обозначения в базе данных? Как я могу это остановить?


Это форма, которую я использую для редактирования записей базы данных:

 class EntryEditForm(forms.Form):
    title = forms.CharField(label=u'Entry title.', max_length=100)
    target = forms.CharField(label=u'Entry target', required=False)
    username = forms.CharField(label=u'Entry-specific username', max_length=100, required=False)
    password = forms.CharField(label=u'Entry-specific password', max_length=100, required=False)
  

Это представление, которое используется для редактирования записей базы данных:

 def editentry_page(request): 
    if request.method == 'POST':
        form = EntryEditForm(request.POST)
        entryid = unquote(request.POST['entryid'])
        if form.is_valid():
            entry = request.user.entry_set.get(id=entryid)
            entry.title=form.cleaned_data['title'],
            entry.username=form.cleaned_data['username'],
            entry.password=form.cleaned_data['password'],
            entry.targetemail=form.cleaned_data['targetemail'],
            entry.user=User.objects.get(username=request.user)
            entry.save()
            return HttpResponseRedirect('/user/%s/' % request.user.username)
    elif 'entryid' in request.GET: 
        entryid = unquote(request.GET['entryid'])
        try:
            selectedentry = request.user.entry_set.get(id=entryid) 
            title = selectedentry.title
            targetemail = selectedentry.targetemail
            username = selectedentry.username
            password = selectedentry.password
        except (Entry.DoesNotExist):
            raise Http404(u'This entry does not exist or is not your entry') 
        entry = Entry.objects.get(id=entryid)
        form = EntryEditForm({
            'title': entry.title, 
            'email': entry.email, 
            'target': entry.target, 
            'username': entry.username, 
            'password': entry.password, 
            })

    else: 
        raise Http404(u'No entry selected - return to your entries to try again.') 
    variables = RequestContext(request, {'form': form, ‘entryid': unquote(request.GET['entryid']),})
    return render_to_response('entry_edit.html', variables)
  

Это модель ввода

 class Entry(models.Model):
    title = models.CharField(max_length=200)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=200)
    username = models.CharField(max_length=200)
    target = models.CharField(unique=False)
    user = models.ForeignKey(User)
  

Комментарии:

1. можете ли вы добавить свою модель ввода?

Ответ №1:

 entry.title=form.cleaned_data['title'],
  

Последняя запятая превращает его в кортеж в вашем представлении. Прекратите это делать.