В настоящее время я работаю над своим первым приложением Django, которое позволяет зарегистрированным пользователям отправлять контент через базовую форму.Сохранение пользователя Django в форме
Он работает до сих пор с одним оговоркой: при отображении формы пользователь («Автор») представляет собой раскрывающийся список всех пользователей, а не автоматически заполняет это поле именем пользователя. Это, очевидно, неприемлемо.
Эта цель состоит в том, чтобы зарегистрированное имя пользователя автоматически заполнило форму. Я видел несколько различных возможных решений подобных проблем, но ничего, что касалось бы чего-либо такого конкретного.
Я попытался установить поле «Автору» в модели «unique = True», но это привело к ошибке базы данных при ее переносе.
Любое понимание будет высоко оценена:
Модель:
class Story(models.Model):
title = models.CharField(max_length=100)
topic = models.CharField(max_length=50)
copy = models.TextField()
author = models.ForeignKey(User)
zip_code = models.CharField(max_length=10)
latitude = models.FloatField(blank=False, null=False)
longitude = models.FloatField(blank=False, null=False)
date = models.DateTimeField(auto_now=True, auto_now_add=True)
def __unicode__(self):
return " %s" % (self.title)
Форма:
class StoryForm(forms.ModelForm):
class Meta:
model = Story
Вид:
@login_required
def submit_story(request):
if request.method == "GET":
story_form = StoryForm()
return render_to_response("report/report.html",
{'form': story_form},
context_instance=RequestContext(request))
elif request.method =="POST":
story_form = StoryForm(request.POST)
if story_form.is_valid():
new_story = Story()
new_story.title = story_form.cleaned_data["title"]
new_story.topic = story_form.cleaned_data["topic"]
new_story.copy = story_form.cleaned_data["copy"]
new_story.author = request.user
new_story.zip_code = story_form.cleaned_data["zip_code"]
new_story.latitude = story_form.cleaned_data["latitude"]
new_story.longitude = story_form.cleaned_data["longitude"]
new_story.save()
return HttpResponseRedirect("/report/all/")
else:
story_form = StoryForm()
return render_to_response("report/report.html",
{'form': story_form},
context_instance=RequestContext(Request))
EDIT: Я думаю, что я нашел относительно простой ответ: Я просто удалил поле «автор» из формы и сохранил вид тот же. Таким образом, я смог опубликовать имя зарегистрированного пользователя. Я думаю, что это работает, если что-то, о чем я не знаю (что много), является неправильным или плохим протоколом.
Интересное решение. У вас была такая же проблема с выпадающим меню, разоблачающим всех пользователей?И это закончилось? Кроме того, это ваше редактирование с сохранением необходимой формы или просто более подходящей для работы с формами, созданными непосредственно из моделей? –
Вы получаете меню выбора выпадающего списка, так как это виджет по умолчанию для поля * ForeignKey *, и да, я тоже это сделал. Я не хотел помещать имя пользователя в формы, так как пользователю ясно, как его зовут, и поэтому мой код удаляет его из формы (для отображения). Нет, это необязательно, но больше объектно ориентировано делать это в самом объекте формы. –
Отлично. И используя ваш метод, он автоматически заполнил поле пользователя зарегистрированным именем пользователя? Если это так, это будет близко к совершенству. –