Наша группа работает над созданием 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)
СПАСИБО !!!