ฉันสามารถสร้างฟิลด์คีย์ต่างประเทศหรือไม่ก็ได้ในโมเดล Django


111

ฉันมีรหัสนี้

subject      = models.ForeignKey(subjects)
location     = models.ForeignKey(location)
publisher    =  models.ForeignKey(publisher)

เป็นไปไม่ได้เสมอไปที่ฉันจะมีหนังสือสามคุณค่า ดังนั้นบางครั้งถ้าฉันไม่รู้เรื่องหรือสถานที่หรือสำนักพิมพ์ จากนั้นฉันต้องการให้มันว่างเปล่า

แต่ถ้าฉันมีฉันต้องเลือกกล่องเพื่อเลือก เป็นไปได้เช่นนั้น

คำตอบ:


197

แน่นอนเพียงเพิ่มblank=True, null=Trueสำหรับแต่ละฟิลด์ที่คุณต้องการยังคงเป็นตัวเลือกเช่น

subject = models.ForeignKey(subjects, blank=True, null=True)

6
ทั้งสองจำเป็นหรือไม่? อะไรคือข้อเสียของการใช้ null = True?
Ward

12
@WardC คำสั่งผสมของทั้งสองบ่อยมากเพราะโดยปกติแล้วถ้าคุณจะปล่อยให้ฟิลด์ว่างในแบบฟอร์มของคุณคุณจะต้องใช้ฐานข้อมูลของคุณเพื่ออนุญาตค่า NULL สำหรับฟิลด์นั้น ข้อยกเว้นคือ CharFields และ TextFields ซึ่งใน Django จะไม่ถูกบันทึกเป็น NULL ค่าว่างจะถูกเก็บไว้ในฐานข้อมูลเป็นสตริงว่าง ('')
fang_dejavu

8
@ วอร์ทั้งคู่ไม่จำเป็น แค่ใช้ก็เพียงพอnull=Trueแล้ว
Jam Risser

8
blank=Trueเป็นสิ่งสำคัญสำหรับการตรวจสอบแบบฟอร์ม จะอนุญาตให้มีสตริงว่างเป็นอินพุตของผู้ใช้ในฟิลด์นี้ null=Trueจะอนุญาตให้มีค่า NULLในคอลัมน์ฐานข้อมูล
cezar

1
ความคิดเห็น @cezar ช่วยชีวิตฉัน! ขอบคุณ
po5i
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.