• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python Django - Nie moge dodać zdjęcia poprzez formularz

Object Storage Arubacloud
0 głosów
824 wizyt
pytanie zadane 10 lutego 2019 w Python przez Eliro Stary wyjadacz (12,160 p.)

Tworzę sobie taką prostą stronkę w Django. Ma to być sklep internetowy. Utworzyłem formularz dodawania przedmiotu, w którym nie działa niestety przesyłanie zdjęć - poprzez panel admina mogę je dodać, przez formularz nie za bardzo.

forms.py

from django import forms
from .models import Item

class ItemForm(forms.ModelForm):

    class Meta:
        model = Item
        fields = ('title', 'category', 'price', 'img',)

urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
	path('', views.homepage, name='homepage'),
	path('item/<int:pk>', views.item_details, name='item_details'),
	path('item/new', views.item_new, name='item_new'),
]

views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Item, Category
from django.utils import timezone
from .forms import ItemForm

def homepage(request):
	 items = Item.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
	 return render(request, 'shop/homepage.html', {'items': items})
def item_details(request, pk):
    item = get_object_or_404(Item, pk=pk)
    return render(request, 'shop/item_details.html', {'item': item})
def item_new(request):
	if request.method == "POST":
		form = ItemForm(request.POST)
		if form.is_valid():
			item = form.save(commit=False)
			item.seller = request.user
			item.published_date = timezone.now()
			item.save()
			return redirect('item_details', pk=item.pk)
	else:
		form = ItemForm()
	return render(request, 'shop/item_edit.html', {'form': form})

item_edit.html

{% extends 'shop/base.html' %}

{% block content %}
    <h1>New post</h1>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

base.html

{% load static %}
<!doctype html>
<html lang='pl'>
<head>
	<meta charset="utf-8">
	<title>MyShop - Simple Django Shopping site</title>
	<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
	<div id="container">
		<div id="header">
			<div class="left-header">
				<a href="/"><p>MyShop</p>
				<p>Simple Django Shopping site</p></a>
			</div>
			<div class="center-header">
				<input type="text" class="search" name="q"> <input type="submit" class="submit" value="Search">
			</div>
			<div class="right-header">
				{% if user.is_authenticated %}
				Hello {{ user.username }} </br>
				<a href="{% url 'accounts:user_details' pk=user.pk %}">User Profile</a></br>
				<a href="{% url 'logout' %}">Logout</a></br>
				<p><a href="{% url 'item_new' %}">Add item</a></p>
				{% else %}
				Hello Anon! </br>
				<a href="{% url 'login' %}">Login</a> or <a href="{% url 'accounts:signup' %}">Register</a>
				{% endif %}
			</div>
		</div>
{% block content %}
{% endblock %}
</body>
</html>

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Category(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()

    def __str__(self):
        return self.title
class Item(models.Model):
    seller = models.ForeignKey(User, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    price = models.FloatField(null=False, blank=False)
    img = models.ImageField(blank=True, null=True,
        upload_to='covers/%Y/%m/%D/')
    published_date = models.DateTimeField(default=timezone.now)
    def __str__(self):
        return self.title

Co zrobiłem nie tak?

komentarz 10 lutego 2019 przez izonik Stary wyjadacz (12,560 p.)
Dostajesz jakieś błędy ?
komentarz 10 lutego 2019 przez Eliro Stary wyjadacz (12,160 p.)
Brak błędów.
komentarz 10 lutego 2019 przez adrian17 Ekspert (344,860 p.)
A... co się dzieje?
komentarz 10 lutego 2019 przez Eliro Stary wyjadacz (12,160 p.)
Chciałbym dodać sobie przedmiot (item) poprzez formularz, który utworzyłem (forms.py). Przedmiot zostaje dodany do bazy, ale nie chce się dodać zdjęcie pomimo tego, że w formularzu mam przycisk do uploadu zdjęć.
komentarz 10 lutego 2019 przez adrian17 Ekspert (344,860 p.)
Żadna ścieżka się nie wpisuje do bazy? Wiersz się dodaje, więc coś tam musi być.
komentarz 10 lutego 2019 przez Eliro Stary wyjadacz (12,160 p.)
W panelu admina Django nie ma żadnego zdjęcia, w folderze ze zdjęciami również brak wysłanego pliku. W bazie danych na phpmyadmin również brak wpisu w polu "img".

1 odpowiedź

+1 głos
odpowiedź 10 lutego 2019 przez izonik Stary wyjadacz (12,560 p.)
wybrane 10 lutego 2019 przez Eliro
 
Najlepsza

Spróbuj tego

form = ItemForm(request.POST, request.FILES)

 

komentarz 10 lutego 2019 przez Eliro Stary wyjadacz (12,160 p.)
Że niby gdzie to wstawić?

Edit: już widzę.

Podobne pytania

0 głosów
0 odpowiedzi 147 wizyt
0 głosów
0 odpowiedzi 246 wizyt
pytanie zadane 31 sierpnia 2021 w Python przez Mateusz_MM Początkujący (430 p.)
0 głosów
2 odpowiedzi 1,540 wizyt
pytanie zadane 19 października 2018 w Python przez Sheida Użytkownik (950 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,941 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...