Đối với một lược đồ cơ sở dữ liệu quan hệ được chuẩn hóa đúng cách, bạn cần một Choice
riêng biệt mô hình có khóa ngoại trên Question
:
class Question(models.Model):
question = models.CharField(...)
class Choice(models.Model):
question = models.ForeignKey("Question", related_name="choices")
choice = modelsCharField("Choice", max_length=50)
position = models.IntegerField("position")
class Meta:
unique_together = [
# no duplicated choice per question
("question", "choice"),
# no duplicated position per question
("question", "position")
]
ordering = ("position",)
Và sau đó bạn có thể nhận được tại Question
các lựa chọn của myquestion.choices.all()
(và nhận câu hỏi từ Choice
với mychoice.question
).
Lưu ý rằng điều này sẽ không áp đặt bất kỳ giới hạn nào đối với số lượng lựa chọn cho một Câu hỏi, thậm chí không bắt buộc một Câu hỏi phải có ít nhất một lựa chọn liên quan.
Trừ khi bạn có lý do thuyết phục để làm khác, nếu không, một lược đồ được chuẩn hóa đúng là những gì bạn muốn khi sử dụng cơ sở dữ liệu quan hệ (rdbms không chỉ đơn thuần là bitbucket, chúng cung cấp rất nhiều rất nhiều của các tính năng hữu ích - miễn là bạn có một lược đồ thích hợp, nghĩa là).