#python #django #django-models #django-views #django-forms
Вопрос:
я задал этот вопрос, но он не был задан должным образом. я работаю над своим проектом электронной коммерции с использованием django. я создал форму, которая должна принимать входные данные и обновлять их в базе данных, но, к сожалению, она не отправляет никаких данных в базу данных, и хотя я указал действие для ПУБЛИКАЦИИ, но я получаю и публикую вместе в своем терминале
вот результат, который я получаю:
[16/Jun/2021 18:09:23] "POST /cart/addcomment/1 HTTP/1.1" 302 0
[16/Jun/2021 18:09:23] "GET /en/cart/addcomment/1 HTTP/1.1" 302 0
URL: /media/product_images/iphone-compare-models-202010_GEO_US_eDOyoqO.jpeg
URL: /media/product_images/iphone-compare-models-202010_GEO_US_eDOyoqO.jpeg
[16/Jun/2021 18:09:23] "GET /en/cart/shop/iphone-12-pro/?
**models.py:**
class Comment(models.Model):
STATUS = (
('New', 'New'),
('True', 'True'),
('False', 'False'),
)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
subject = models.CharField(max_length=50, blank=True)
comment = models.CharField(max_length=250, blank=True)
rate = models.IntegerField(default=1)
ip = models.CharField(max_length=20, blank=True)
status = models.CharField(max_length=10, choices=STATUS, default='New')
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.subject
**views.py:**
def addcomment(request, id):
url = request.META.get('HTTP_REFERER') # get last url
# return HttpResponse(url)
if request.method == 'POST': # check post
form = CommentForm(request.POST)
if form.is_valid():
data = Comment() # create relation with model
data.subject = form.cleaned_data['subject']
data.comment = form.cleaned_data['comment']
data.rate = form.cleaned_data['rate']
data.ip = request.META.get('REMOTE_ADDR')
data. product_id = id
current_user = request.user
data.user_id = current_user.id
data.save() # save data to table
messages.success(request, "Your review has ben sent. Thank you for your interest.")
return HttpResponseRedirect(url)
return HttpResponseRedirect(url)
**forms.py:**
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['subject', 'comment', 'rate']
**admin.py:**
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = ['subject', 'comment', 'status', 'create_at']
list_filter = ['status']
readonly_fields = ('subject', 'comment', 'user', 'product', 'rate', )
**html:**
<div class="collapse" id="reviewForm">
<form class="review-form"
action="/cart/addcomment/{{ product.id }}" method="post">
{% csrf_token %}
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="sr-only" for="reviewEmail">subject:</label>
<input class="form-control form-control-sm" name="subject" type="text" placeholder="Your subject" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label class="sr-only" for="reviewText">Review:</label>
<textarea class="form-control form-control-sm" name="comment" rows="5" placeholder="Your review " required></textarea>
</div>
</div>
<div class="row">
<div class="col-md-6 d-flex justify-content-between">
<div class="p-2">
<div class="form-group">
<div class="input-rating">
<strong class="">Please rate: </strong>
<div class="stars">
<input type="radio" id="star5" name="rate" value="5" /><label for="star5"></label>
<input type="radio" id="star4" name="rate" value="4" /><label for="star4"></label>
<input type="radio" id="star3" name="rate" value="3" /><label for="star3"></label>
<input type="radio" id="star2" name="rate" value="2" /><label for="star2"></label>
<input type="radio" id="star1" name="rate" value="1" /><label for="star1"></label>
</div>
</div>
</div>
</div>
<div class="p-2 d-flex justify-content-between">
{% if user.id is not None %}
<button class="btn btn-outline-dark" type="submit">
Post Review
</button>
{% else %}
You must be logged in to post a review
{% endif %}
</div>
</div>
</div>
</form>
</div><br>
форма.ошибки:описание изображения формы.ошибок здесь
Комментарии:
1.
print(form.errors)
в нижней части представления (перед последним перенаправлением) будет указано, что не так с формой.