我有一个应用程序可以添加位置,用户可以留下评论(5星评级)。这已经有效了。
我想做的是为评论添加问题和选择。但是,我想确保只询问某些类型的问题,具体取决于位置的类型。
到目前为止,我正在考虑使用OneToOneField扩展Location的类型,这与官方文档示例非常相似,其中Restaurant和Place具有OneToOneField关系,然后使用ManyToManyField进一步指定类别和子类别模型。
但是,我正在努力解决的问题是如何向某个地点的所有类型添加问题。
我目前的问题是,必须逐个地添加问题。相反,我想要的是向所有餐厅添加一个问题(OneToOneField到位置),甚至可以添加到类别(ManyToManyField到餐馆)。
前进的最佳方式是什么?我是否还需要另一个模型来保存一种位置的问题配置?
另外,不相关的说明但是我可以有属性问题的课题吗?或者这会让我感到悲伤吗?
感谢您提供进一步了解的任何提示/建议。
class Location(models.Model):
...
questions = models.ManyToManyField('reviews.Question', blank=True)
class Restaurant(models.Model):
...
location = models.OneToOneField(Location, on_delete=models.CASCADE,
primary_key=True,)
class Review(models.Model):
...
reviewer = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
location = models.ForeignKey(Location, on_delete=models.CASCADE)
RATING_STAR_CHOICES = (
(1, '1 star'),
(2, '2 star'),
(3, '3 star'),
(4, '4 star'),
(5, '5 star'),
)
stars = models.IntegerField(choices=RATING_STAR_CHOICES)
description = models.TextField(null=True, blank=True)
class Answer(models.Model):
answer = models.CharField(max_length=30)
class Question(models.Model):
question = models.CharField(max_length=120)
answers = models.ManyToManyField(Answer)
review = models.ForeignKey(Review, null=True, blank=True,
on_delete=models.CASCADE)