@kyklaed

Как связать объект user с другим объектом во время его сохранения?

Всем привет!

У меня есть авторизованный юзер, есть форма, что он должен заполнить после регистрации и авторизации, данные из формы сохраняются в бд и есть фореджен кей связанный с таблицей User как сделать что бы автоматически ставилась зависимость , например вася авторизован и вводит нужные данные и когда он нажимает сохранить. то таблица сохранялась сразу привязанной к его учетной записи ? на скриншоте указал как надо что бы было после сохранения данных!

class UserdData(models.Model):
    username = models.ForeignKey(User,blank=True,null=True,default=None)
    first_name = models.CharField(max_length=100,blank=True,null=True)
    last_name = models.CharField(max_length=100,blank=True,null=True)
    city=models.CharField(max_length=100,blank=True,null=True)
    street= models.CharField(max_length=100,blank=True,null=True)
    building = models.CharField(max_length=5,blank=True,null=True)
    index = models.CharField(max_length=10,default=None,blank=True,null=True)
    postcode=models.IntegerField(max_length=10,blank=True,null=True)
    phone = models.CharField(max_length=30,default=None,blank=True,null=True)

    def save_user(self):
        self.save()

    def __str__(self):
        return '%s %s' % (self.last_name,self.first_name)


@csrf_protect
@login_required
def user_data(request):
    if request.method == "POST":
        form = UserDataForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('myoffice/account/userpage.html')
    else:
        form=UserDataForm()
    return render(request,'myoffice/userdata.html',{'form':form})


class UserDataForm(forms.ModelForm):
    class Meta:
        model = UserdData
        fields=('first_name','last_name', 'city','street','building','index','postcode','phone')


8cd8eb4bb0754ef4ac668793a4beec35.jpg
  • Вопрос задан
  • 532 просмотра
Решения вопроса 2
@immaculate
Программист-путешественник
1. В модели django.contrib.auth.models.User уже есть поля first_name и last_name - дополнительные копии не принесут ясности, наоборот, рано или поздно в базе образуется бардак и будет непонятно, где настоящие имя и фамилия, и вообще неясен смысл такой денормализации
2. Непонятно, зачем вам метод save_user — он ничего не делает и абсолютно не нужен
3. Правильнее назвать поле user вместо username
4. Теоретически (зависит от ваших требований) правильнее создавать свою модель пользователя и ссылаться на нее как settings.AUTH_USER_MODEL
5. В определении полей с null=True, blank=True не нужен default — по умолчанию и так будет None
6. Странная модель, в которой все поля могут быть NULL - скорее это от непонимания
7. Для ваших целей правильнее использовать django.views.generic.edit.CreateView, django.views.generic.edit.UpdateView, и код будет короче, и даже форму можно не определять
8. В redirect написана какая-то дичь!
9. При использовании настроек по умолчанию, все view и так защищены от CSRF, нет необходимости явно писать декоратор csrf_protect

А в общем и целом, вам надо начать хотя бы с прочитения Django Tutorial. Вы явно пишете код не понимая, что пишете и зачем. Отсюда и проблемы.
Ответ написан
Комментировать
saintbyte
@saintbyte
Django developer
form.instance.username = request.user ?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы