Giúp đỡ về django

python
django

(Dat Trinh Van) #1

chào mọi người. Mình đang làm cái đồ án web dùng django, làm tới khúc ấn vào 1 sản phẩm sau đó chuyển sang url chi tiết sản phẩm đó mà bị lỗi bữa h vẫn chưa sửa đượ[email protected]@ mong mọi người giúp đỡ!!
Hình ảnh lỗi của mình ~~
https://drive.google.com/open?id=1d1lJJ9ddK1GHKgyfbT63_1cO3Q7jTKp5


(‏) #2

copy rồi paste code lên đây em ơi :V ai lại đi đưa 6 cái hình mờ câm thế kia :V

theo mấy cái hình kia thì trong class book em cho ISBN là primary key, có thể django nó ko tạo id key cho table book tương ứng. Em vào thư mục migrations tìm coi nó create table book bằng câu lệnh nào hay em vào /admin xem table book có field id hay ko. Nếu ko có thì phải sửa book_id chữ id lại thành ISBN hết :V Nếu ko thì đừng để ISBN là primary_key nữa, sửa lại primary_key=True thành unique=True rồi make migration và hy vọng nó thành công :V :V :V Đúng hơn là để nó tự động tạo primary_key, em tự set làm gì bây giờ có nước viết script riêng gì đó tạo table new_book mới, copy book cũ sang new_book, drop book, rồi rename new_book thành book :V


(Dat Trinh Van) #3

e mới kiểm tra thử đúng là k có field id nào trong models của e hết @@ bây h e phải làm sao đây ạ@@ xóa hết primary_key để nó tự tạo lại hết ạ + xóa luôn cái dbsqlite :(( e ms sửa lại giống a nhưng chạy makemigrations nhưng ko được @@


(‏) #4

nếu project còn đang ở dạng sơ khai thì tạo project mới làm lại từ đầu đi em =], sửa lại xóa hết mấy cái models khác mà có field primary_key=True luôn, ví dụ Chara_id trong hình. Cứ để models.Model của django nó tự tạo field id của nó. Chứ bây giờ đổi tên model lại phải sửa tên mấy cái foreign key của các models khác, rồi tạo table mới copy từ table cũ sang rồi chuyển tên các khóa ngoại lại rồi drop table cũ thì mất công quá. Mà hình như sqlite có cho tạm thời disable khóa ngoại gì đó có thể dễ hơn nhưng thôi tạo project mới luôn đi cho nhớ mà chừa =]

hoặc có cách tương đối dễ hơn là sửa primary_key=True lại thành unique=True, rồi xóa db.sqlite hiện tại (xóa vào thùng rác đừng xóa hẳn), rồi vào thư mục bookstore/migrations xóa hết các migrations (cũng xóa vào thùng rác) rồi gõ makemigrations cho nó tạo lại từ đầu. Đương nhiên là data hiện tại trong db mất hết :V Nếu muốn giữ data cũ thì phải drop table rồi tạo table mới lằng nhằng :V

lần sau tạo table mới trước khi chạy python manage.py migrate thì nhớ xem câu lệnh sql của migration mới nó là gì, có giống với schema của mình ko cho chắc cú rồi hẵn phang migrate.

à còn cách khác giữ lại primary_key=True cho ISBN thì em vào sửa lại trong routes.py chỗ <int:book_id> thành <string:book_isbn> hay str gì đó đại lại là nhận vào chuỗi thay vì số :V Rồi vào views.py sửa lại tiếp chỗ method tương ứng của nó nhận argument là book_isbn, trong cái query kia sửa lại id=book_id thành ISBN=book_isbn rồi có lẽ là được. Nhưng mà ko hay lắm vì khóa chính nên là số nguyên cho truy cập lẹ với dễ nhớ, cứ xxx.id là khóa chính cho dễ, xxx.abc yyy.xyz là khóa chính thì khó nhớ :V


(Dat Trinh Van) #5

anh ơi. Em đã tạo lại 1 project mới làm lại rồi nhưng vẫn k được, mặc dù đã có field ID như anh nói.
anh coi hộ xem e sai chỗ nào v a ~~

code của e đây ạ : https://drive.google.com/drive/folders/1d1lJJ9ddK1GHKgyfbT63_1cO3Q7jTKp5


(Khoa Nguyễn Anh) #6

Hi em, anh đọc trong file urls.py thấy trong url tới product_single dùng path nhưng cuối url có dấu $ cái này thì trong regex rồi nên nó ko match url
Em thử xóa $ đi rồi run lại


(Dat Trinh Van) #7

em sửa v r vẫn k được a ơi @@


nó cứ bị lỗi này hoài a :((


(Khoa Nguyễn Anh) #8

(Dat Trinh Van) #9

mình làm theo cách trên web thì vô được trang web nhưng ấn vào sản phẩm thì vẫn k vào được sản phẩm chi tiết đó anh :((


(‏) #10

Cái hình lỗi ở dòng 61 file base.html mà đưa hình ở đâu ko vậy :V cái hình lỗi cắt ngay dòng 60… project chắc có tầm 20 files mà cũng ko up đầy đủ lên ko chạy thử đc thì làm sao sửa được :V em zip lại toàn bộ rồi đưa lên hoặc xài github


(Dat Trinh Van) #11

https://drive.google.com/open?id=112P71V881z2hldHtZpIkarA_wHfAoTJd
đây là full project của e nè a :v e có xóa dòng số 61 đó thì lại bị lỗi dòng khác @@
a xem giúp e phát =))


(‏) #12

book/views.py sửa views.index lại:

def index(request):
    items = book.objects.all()
    big_image = Big_image.objects.all()
    context ={
        'items': items,
        'big_image':big_image
    }
    return render(request, 'bookstore/index.html',context)

book.objects.all() là số nhiều nha. List item thì đặt tên số nhiều cho khỏi lầm với item số ít.

templates/bookstore/index.html sửa lại từ dòng 30 tới dòng 47:

            <div class="row">
                {% for item in items %}
                <div class="col-lg-3 col-md-6">
                    <div class="item">
                        <img src="{% static item.Image%}" alt="img">
                        <h3>{{ item.book_name }}</h3>
                        <h6><span class="price">{{ item.Dongia }}</span> / <a href="#">Buy Now</a></h6>
                        <div class="hover">

                            <a href="{% url 'product_single' item.id  %}">
                            <span><i class="fa fa-long-arrow-right" aria-hidden="true"></i></span>
                            </a>

                        </div>
                    </div>
                </div>
                {% endfor %}
            </div>

copy paste cái for loop {% for item in detail %} kia là sao đây?? Lộn bên product.html qua à??? Xóa hết. Mấy cái item trong này sửa lại là số nhiều hết để khỏi nhầm lẫn, rồi Item in hoa(?) sửa lại item thường. Đặt tên cho rõ ràng tí
nếu được sửa luôn cái big_image thành big_images rồi cái {% for item in big_image %} sửa lại là {% for big_image in big_images %} có phải dễ hơn ko sao lại truyền biến có kiểu là list mà đi đặt tên số ít rồi for each lại phải đặt tên khác, tên in hoa???

à quên nữa vô book/urls.py sửa lại cái path

    path('product_single/<int:book_id>/', views.product_single, name='product_single'),

ông Khoa bảo xóa dấu $ đi mà đi copy paste cái regex làm gì vậy :V :V :V


(Dat Trinh Van) #13

dạ được r anh ơi :)) cảm ơn 2 anh đã giúp đỡ e :v @@


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?