Как хранить данные пользователя, не спрашивая пользователя? - PullRequest
1 голос
/ 17 октября 2019

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

Я не хочу, чтобы пользовательявно добавьте детали сам. Он должен обрабатываться бэкэндом.

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

models.py

class PhoneBook(models.Model):
    name = models.CharField(max_length=10, blank=False)
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.name


class Contact(models.Model):
    first_name = models.CharField(max_length=50, blank=False)
    last_name = models.CharField(max_length=50, blank=False)
    phone_number = models.CharField(max_length=13, blank=False, unique=True)
    phone_book = models.ManyToManyField(PhoneBook, related_name='phone_book')
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.phone_number

views.py

@login_required
def create_phone_book(request):
    form = CreatePhoneBookForm(request.POST or None)
    form.instance.user = request.user
    if form.is_valid():
        form.save()
        form = CreatePhoneBookForm()

    context = {'form': form}

    return render(request, 'CallCenter/create_phone_book.html', context)


@login_required
def add_to_phone_book(request):
    form = AddToPhoneBookForm(request.POST or None)
    form.instance.user = request.user

    if form.is_valid():
        form.save()
        form = AddToPhoneBookForm()

    context = {'form': form}
    return render(request, 'CallCenter/add_to_phone_book.html', context)

forms.py

class AddToPhoneBookForm(forms.Form):
    class Meta:
        model = Contact
        fields = ['first_name', 'last_name', 'phone_number', 'phone_book']


class CreatePhoneBookForm(forms.Form):

    class Meta:
        model = PhoneBook
        fields = ['name']

Я получаю ошибку AttributeError at / call-center / add /

У объекта 'AddToPhoneBookForm' нет атрибута 'instance'

1 Ответ

2 голосов
/ 17 октября 2019

Вы должны использовать <b>Model</b>Form, а не Form. Сам по себе Form не имеет экземпляра, поэтому вы можете определить:

class AddToPhoneBookForm(<b>forms.ModelForm</b>):
    class Meta:
        model = Contact
        fields = ['first_name', 'last_name', 'phone_number', 'phone_book']


class CreatePhoneBookForm(<b>forms.ModelForm</b>):

    class Meta:
        model = PhoneBook
        fields = ['name']

Обычно, когда вы делаете успешный почтовый запрос, вы должны перенаправить , чтобы реализовать Post / Redirect / Get шаблон [wiki] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...