@justdani

Не могу заполнить связную таблицу в djangoю. Что не так?

Ребят, бьюсь который день уже. Никак не получется наполнить связную модель в шаблоне. ЗАполняется модель User, но не заполняется модель Band.
models.py
from django.db import models
from django.contrib.auth.models import User


class Band(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, default="")
    band_name = models.CharField(max_length=50)
    phone = models.CharField(max_length=15)
    vk_page = models.URLField(blank=True, null=True)


class Repetition(models.Model):
    band = models.ForeignKey(Band, on_delete=models.CASCADE)
    start_time = models.CharField(max_length=5)
    end_time = models.CharField(max_length=5)
    date = models.DateField()


def user_post_save(sender, instance,**kwargs):
    (profile, new) = Band.objects.get_or_create(user=instance)


def save_user_profile(sender, instance, **kwargs):
    instance.band.save()


models.signals.post_save.connect(user_post_save, sender=User)
models.signals.post_save.connect(save_user_profile, sender=User)


forms.py
from django import forms
from .models import User, Repetition, Band


class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'password')


class BandForm(forms.ModelForm):
    class Meta:
        model = Band
        fields = ('band_name', 'phone', 'vk_page',)
    password = forms.CharField(widget=forms.PasswordInput, label="Пароль")


class RepetitionForm(forms.ModelForm):
    class Meta:
        model = Repetition
        fields = ('start_time', 'end_time', 'date')


views.py
from django.contrib import messages
from django.shortcuts import render, redirect
from .forms import BandForm, RepetitionForm
from .models import Band, Repetition, User


def band_form(request):
    user = User()
    if request.method == 'POST':
        _band_form = BandForm(request.POST, instance=user)
        _repetition_form = RepetitionForm(request.POST)
        if _band_form.is_valid():
            data = _band_form.cleaned_data          
            user.username = data['band_name']
            user.set_password(data['password'])
            _band_form.save()
            return redirect('/')
        else:
            messages.error(request, 'Whoo!')
    else:
        _band_form = BandForm(instance=user)
        _repetition_form = RepetitionForm()
    return render(request, 'auth.html', {'band_form': _band_form, 'repetition_form': _repetition_form})
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
crazyzubr
@crazyzubr
Python backend-developer
Потому что:

  1. _band_form = BandForm(request.POST, instance=user) - здесь задается instance модели User, а нужен Band.
  2. Если инстанса Band еще нет, его не нужно передавать
  3. В мета у формы BandForm для fields не указано поле user, значит сохраняться оно не будет даже если передать такой параметр.
  4. user = User()- несохраненный инстанс юзера бесполезно указывать как ForeignKey для Band. Необходимо его самого сначала сохранить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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