Как передать модель пользователя как значение ForeignKey при сохранении ModelForm в Django? - PullRequest
2 голосов
/ 09 января 2020

Файл моделей:

from django.db import models
from django.conf import settings


class Book(models.Model):
    rel_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Posted By")
    title = models.CharField(max_length=256, verbose_name="Title")
    description = models.TextField(verbose_name="Description")
    price = models.IntegerField(verbose_name="Price")
    state = models.CharField(max_length=256, verbose_name="State")
    city = models.CharField(max_length=256, verbose_name="City")
    neighbourhood = models.CharField(max_length=256, verbose_name="Neighbourhood")
    phone = models.IntegerField(verbose_name="Phone Number")

    def __str__(self):
        return self.title + f" ({self.rel_user.username})"

Файл форм:

from django.forms import ModelForm
from Books.models import Book


class BookForm(ModelForm):
    class Meta:
        model = Book
        fields = ['title', 'description', 'price', 'state', 'city', 'neighbourhood', 'phone']

Файл просмотров:

from django.shortcuts import render, redirect
from Books.forms import BookForm
from django.contrib import messages


def sell(request):
    if request.method == "GET":
        form = BookForm()
    else:
        form = BookForm(request.POST, )
        if form.is_valid():
            form.save()
            messages.success("Successfully added!")
            return redirect('sell')
        else:
            messages.error("Please fill in all the fields.")
    return render(request, 'Books/sell.html', {"form": form})

Каждый раз, когда пользователь отправляет форму, Я хочу, чтобы значение ForeignKey было заполнено этой моделью пользователей. Как мне это сделать? Итак, предположим, что пользователь «Джон» заполнил форму. Когда он нажимает кнопку «Отправить», данные, которые он вводит + его пользовательская модель, должны go войти в базу данных для этой записи.

Ответы [ 2 ]

3 голосов
/ 09 января 2020
def sell(request):
    if request.method == "POST":
        form = BookForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.rel_user = request.user
            instance.save()
            messages.success("Successfully added!")
            return redirect('sell')
        else:
            messages.error("Please fill in all the fields.")
    else:
         form = BookForm()
    return render(request, 'Books/sell.html', {"form": form}

request.user может быть назначен rel_user, как указано выше

1 голос
/ 09 января 2020

Вы можете назначить пользователя на instance из form:

из django .shortcuts import render, перенаправить из Books.forms, импортировать BookForm из django .contrib, импортировать сообщения

def sell(request):
    if request.method == 'GET':
        form = BookForm()
    else:
        form = BookForm(request.POST)
        <b>form.instance.rel_user = request.user</b>
        if form.is_valid():
            form.save()
            messages.success('Successfully added!')
            return redirect('sell')
        else:
            messages.error('Please fill in all the fields.')
    return render(request, 'Books/sell.html', {'form': form})
...