Я думаю, что это работает, но я натолкнулся на пару вещей, прежде чем заставить его работать, что я хочу понять лучше, так что вопрос. Также похоже, что другие люди делают это разными способами, глядя на другие ответы на переполнение стека. Чего я пытаюсь избежать, так это того, чтобы пользователь выбирал свое имя пользователя из раскрывающегося списка при создании нового профиля поиска. Модель профиля поиска:
class Search_Profile(models.Model):
author_of_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True)
keyword_string = models.CharField(max_length=200)
other_stuff = models.CharField(max_length=200)
Форма, которую я получил, была:
class Search_Profile_Form(ModelForm):
class Meta:
model = Search_Profile
fields = [ 'keyword_string', 'other_stuff']
Где я намеренно не включил «author_of_profile», чтобы он не отображался или не нужен подлежит проверке. Я попытался скрыть это, но тогда форма не сохранялась в модели, потому что поле не было введено. Если бы я был в порядке с раскрывающимся списком, я бы, наверное, оставил его.
У меня не было проблем с HTML при тестировании на полноту:
<form action="" method="POST">
{% csrf_token %}
{{ form.author_of_profile}}
{{ form.keyword_string }}
{{ form.other_stuff }}
<input type="submit" value="Save and Return to Home Page">
</form>
И View - это то место, где я закончил обработку формы и модели отдельно, сначала сохранив форму, а затем обновив модель, что, как я думаю, может быть другим способом, которым люди это делают.
def New_Profile(request):
if request.method=='POST':
form = Search_Profile_Form(request.POST)
if form.is_valid():
post=form.save(commit=False)
# here is where I thought I could update the author of profile field somehow with USER
# but If I include the author_of_profile field in the form it seems I can't.
post.save()
#So instead I tried to update the author_of profile directly in the model
current_profile=Search_Profile.objects.last()
current_profile.author_of_profile=request.user
current_profile.save()
return(redirect('home'))
else:
form=Search_Profile_Form()
return render(request, 'mainapp/New_Profile.html', {'form': form})
Итак, несколько вопросов: для внешнего ключа в поле author_of_profile лучше использовать blank = True или null = True. В итоге я использовал request.user вместо импорта из django .contrib.auth.models import Пользователь есть ли разница ? Мой реальный вопрос, однако, является ли приведенное выше разумным способом получить данные формы и обновить базу данных с помощью этих данных и пользователя? Или мне не хватает другого способа, который больше встроен?