Как прикрепить пользователя Django к ModelForm - PullRequest
0 голосов
/ 07 мая 2020

Наша группа работает над созданием Django проекта «для развлечения», в котором пользователи будут добавлять и удалять книги для продажи. Однако мы столкнулись с проблемой попытки автоматически назначить зарегистрированного пользователя книге, которую они добавляют через AddBookForm(ModelForm). Попытка выполнить что-то вроде Book.objects.get(AccountUser) просто возвращает список всех созданных учетных записей, а также Book.objects.filter(seller=request.user). Мы только хотим автоматически назначить текущего пользователя, который вошел в систему, когда он go добавляет книгу, но не имеет успеха при чтении документации и просмотре множества учебных пособий. Любая помощь будет принята с благодарностью !!

МОДЕЛЬ

class Book(models.Model):
    NEW = 'NEW'
    USED = 'USED'
    CONDITION_CHOICES = [
        (NEW, 'New'),
        (USED, 'Used'),
    ]
    FICTION = 'FICTION'
    NON_FICTION = 'NON-FICTION'
    POETRY = 'POETRY'
    DRAMA = 'DRAMA'
    EDUCATION = 'EDUCATION'
    GENRE_CHOICES = [
        (FICTION, 'Fiction'),
        (NON_FICTION, 'Non-Fiction'),
        (POETRY, 'Poetry'),
        (DRAMA, 'Drama'),
        (EDUCATION, 'Education'),
    ]

    class Subject(models.IntegerChoices):
        architecture_and_construction = 0
        arts_and_digital_arts = 1
        business_and_management = 2
        communications_and_media = 3
        computing_and_mathematics = 4
        criminal_justice = 5
        education_and_teaching = 6
        engineering_and_technology = 7
        entrepreneurship = 8
        exploratory = 9
        government_and_administrations = 10
        health_and_wellness = 11
        humanities = 12
        interdisciplinary_studies = 13
        law_and_public_services = 14
        medical_studies_and_sciences = 15
        nursing_and_health_care = 16
        performing_arts = 17
        psychology_and_counseling = 18
        sciences = 19
        social_and_behavioral_sciences = 20
        sustainability = 21
        theology_and_religions = 22
        other = 23

    title = models.CharField(max_length=500)
    author_first_name = models.CharField(max_length=50)
    author_last_name = models.CharField(max_length=50)
    publisher = models.CharField(max_length=50)
    edition = models.IntegerField(default=1)
    isbn = models.CharField(max_length=17, unique=True)
    condition = models.CharField(max_length=4, choices=CONDITION_CHOICES, default=USED)
    subject = models.IntegerField(choices=Subject.choices)
    genre = models.CharField(max_length=11, choices=GENRE_CHOICES, default=FICTION)
    language = models.CharField(max_length=20, blank=True, null=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    seller = models.ForeignKey(AccountUser, on_delete=models.DO_NOTHING)

    class Meta:
        db_table = 'book'

    def get_absolute_url(self):
        return reverse('/book/', args=[str(self.id)])

    def __str__(self):
        return self.title

ФОРМЫ

class AddBookForm(ModelForm):
    edition = forms.IntegerField(widget=forms.TextInput, initial=1)
    price = forms.DecimalField(widget=forms.TextInput)

    class Meta:
        model = Book
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(AddBookForm, self).__init__(*args, **kwargs)
        self.fields['title'].widget.attrs.update({'size': 60})
        self.fields['edition'].widget.attrs.update({'size': 2})
        self.fields['price'].widget.attrs.update({'size': 8})
        self.fields['author_first_name'].widget.attrs.update({'size': 15})
        self.fields['author_last_name'].widget.attrs.update({'size': 15})
        self.fields['publisher'].widget.attrs.update({'size': 25})
        # self.fields['seller'].widget.attrs.update({forms.HiddenInput})

ПРОСМОТРЫ

@login_required(login_url='index')
def add_books(request):
    posted_books = Book.objects.filter(seller=request.user.email)
    if request.POST:
        create_book_form = AddBookForm(request.POST)
        if create_book_form.is_valid():
            create_book_form.save(commit=True)
            messages.success(request, "Book Added to Site!")
            return redirect('books')
        else:
            messages.error(request, "Book was not added. Please make sure all information is entered and correct.")
            context = {'book_list': posted_books, 'form': create_book_form}
    else:
        create_book_form = AddBookForm()
        context = {'book_list': posted_books, 'form': create_book_form}
    return render(request, 'accounts/add&remove.html', context)

СПАСИБО !!!

...