【问题标题】:Django: packaging an app with a ForeignKey to settings.AUTH_USER_MODELDjango:将带有 ForeignKey 的应用程序打包到 settings.AUTH_USER_MODEL
【发布时间】:2022-02-03 16:29:47
【问题描述】:

我有一个在我的许多项目中使用的应用程序,并且想要打包它。 应用中的模型有 ForeignKey 和 ManyToManyField 到 settings.AUTH_USER_MODEL

class LogEntry(models.Model):
    authenticated_user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
                                           null=True, related_name='log_entries',
                                           on_delete=models.CASCADE)
    involved_users = models.ManyToManyField(to=settings.AUTH_USER_MODEL, blank=True,
                                            through='LogUsers',
                                            related_name='other_log_entries')

此应用在不同项目中的迁移涉及不同的用户模型。 有时是自定义用户模型 ('user', ... to='registry.RdpUser),有时是标准用户模型 django.contrib.auth.models.User

是否可以使用适用于这两种情况的迁移来打包应用程序?

对于带有外键到 settings.AUTH_USER_MODEL 的打包应用程序的最佳方法是什么?

我知道一个解决方案是使用GenericForeignKey,但我想避免这种情况。

【问题讨论】:

    标签: django django-models foreign-keys packaging


    【解决方案1】:

    即使 django 生成的迁移指向在 settings.AUTH_USER_MODEL 中找到的特定模型

    ('user', ... to='registry.RdpUser')

    我在 django 中找到了迁移到 settings.AUTH_USER_MODEL 的迁移 https://github.com/django/django/blob/main/django/contrib/admin/migrations/0001_initial.py

                (
                    "user",
                    models.ForeignKey(
                        to=settings.AUTH_USER_MODEL,
                        on_delete=models.CASCADE,
                        verbose_name="user",
                    ),
                ),
    

    所以我想我可以编辑我的迁移到

    ('user', ... to=settings.AUTH_USER_MODEL)
    

    在打包应用程序之前。 我很确定它可以工作,但由于我使用了 GenericForeignKey 方法,因此尚未对其进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2015-07-09
      • 2012-07-11
      • 2014-08-29
      • 2013-08-31
      • 2013-06-04
      • 2017-05-27
      相关资源
      最近更新 更多