【问题标题】:Populating django model with objects from other model使用来自其他模型的对象填充 django 模型
【发布时间】:2021-01-01 23:48:02
【问题描述】:

我是 django 的新手,但正在为我当地的一个志愿帆船组织开发一个应用程序。不知道如何问这个问题,因为它相当笼统,但我希望基于两个模型发生以下情况;

游艇类(船名、船长、颜色等)

Race_Event 类(每艘船的活动日期、时间结果)

第 1 步:用户需要每周创建一个 Race_Event。我希望将 Yacht 模型中的船加载到 Race_Event。
第 2 步:用户将输入每艘船的比赛时间。

有没有办法将对象从一个模型预加载到另一个模型中?使用 ForeignKey,用户每次都必须添加船。任何对我研究的方向都会有所帮助。

这是目前为止的简化代码;

class Yacht (models.Model):

    yacht_classes = [('A', 'A'),('A1', 'A1'),]
    yacht_type = [('J-29','J-29'),('J-24','J-24'),]

    yacht_name = models.CharField(max_length=75)
    yacht_type = models.CharField(max_length=25, choices=yacht_type, 
    default='J-29')
    yacht_class = models.CharField(max_length=25, choices=yacht_classes)
    skipper = models.ForeignKey(Skipper, on_delete=models.CASCADE)

    def __str__(self):
        return self.yacht_name


class Event (models.Model):
    race_date = models.DateTimeField(default=timezone.now)
    #yachts = #how to Include Yacht.objects.all() to the field?

class Results (models.Model):
    pass

谢谢

【问题讨论】:

  • 是否所有的 Yacht 实例都需要与新的 RaceEvent 实例相关联?
  • 是的。如果游艇没有比赛,我们的想法是让时间为空,内部逻辑将处理结果列表。

标签: django model


【解决方案1】:

是的,你可以使用信号... 保存对象后,您可以调用 post_save 并将所有游艇添加到比赛中 更多 => https://docs.djangoproject.com/en/3.1/ref/signals/#post-save

但我认为这不是好方法......

(并非每次都必须存在或必须保存所有数据 => 将行保存在数据库中)

我建议您在比赛和运输之间使用 m2M 并使用直通表,其中时间保存在表之间。

然后由您自己决定如何向最终用户提出此问题。

使用此解决方案,您只需保存所需的数据。

这可以通过

https://docs.djangoproject.com/en/3.1/topics/db/models/#extra-fields-on-many-to-many-relationships

【讨论】:

  • 谢谢,我会阅读这两个链接。假设所有的船总是要填充比赛事件(他们也想显示没有比赛的船),即使有 post_save 信号,你将如何填充比赛?
  • 好吧,保存比赛时总是调用 post_save 信号。我不知道你的模型是什么样子,所以我不知道该怎么做。如果使用 m2m,它将通过每艘船的多个添加来完成。
  • 道歉。我已将代码添加到原始帖子中。
  • 您如何将所有游艇添加到上述模型中的事件中?
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 2019-11-21
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 2015-04-23
  • 2021-11-19
  • 2021-08-30
相关资源
最近更新 更多