Hỏi về crud trong django

Chào các bạn, mình mới học Django một thời gian nhưng vẫn thắc mắc về cái foreign key của nó. Bình thường thì trong sql , mình hay để khoá ngoài là tên một trường là khoá chính của bảng khác
vd như: Bảng Sinh viên có MALOP liên kết đến khoá chính là MALOP trong bảng LOP
tuy nhiên trong django thì đại loại là:
class LOP(models.Model):

SINHVIEN = models.Foreignkey(SINHVIEN, on_delete = models.CASCADE)
(thực tế thì sinh viên với lớp là manytomany, tuy nhiên cứ vd tạm manytoone)
thì trong django, ở model SINHVIEN mình có cần khai báo thêm trường MALOP hay không
và trong form nhập thông tin cho model SINHVIEN, mình có cần khai báo thêm field MALOP hay không
và mình nên dùng form hay modelform
(mình không dùng admin site nhé)
Cảm ơn các bạn nhiều!

Giả sử bạn có 2 model: Student và ClassRoom. 1 ClassRoom có nhiều Student thì việc khai báo foreign key cần khai báo ở model Student.

class Student(modes.Model):
    ...
    class_room = models.ForeignKey(ClassRoom, related_name="students", null=True, on_delete=models.CASCADE)
    ...

Về vấn đề nên dùng forms.Form hay ModelForm thì tuỳ vào từng trường hợp.
Nếu bạn chỉ muốn validate dữ liệu thì dùng forms.Form, nếu muốn vừa có thể validate dữ liệu, vừa đọc/ghi xuống DB thì dùng ModelFormModelForm là subclass của forms.Form có thêm các tính năng liên quan đến DB.

1 Like

lúc thêm form field để input thì vẫn phải khai báo thêm field của foreign key đúng ko ạ

Tùy vào ngữ cảnh, ví dụ như bạn đã có 1 danh sách các lớp học. Vào 1 lớp để tạo sinh viên thì không cần input mã lớp vì bạn có thể lấy mã lớp từ URL của nó. Còn nếu bạn cần tạo sinh viên mà không phải vào 1 lớp cụ thể nào trước thì cần phải tạo input cho mã lớp bằng dropdown hoặc autocomplete chẳng hạn.

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