【问题标题】:System check identified 3 issues (0 silenced)系统检查确定了 3 个问题(0 个已静音)
【发布时间】:2018-01-20 06:31:22
【问题描述】:

我的 model.py 可能有什么问题。我已经尝试了一切都没有发生。我认为我以正确的方式定义了我的外键。这可能是我的定义有问题还是我必须使用 memberid.user我的foreginkey 或会产生什么效果。欢迎任何贡献。

Performing system checks...

Unhandled exception in thread started by <function wrapper at 0x7f6a926d69b0>
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
    self.check(display_num_errors=True)
  File "/usr/lib64/python2.7/site-packages/django/core/management/base.py", line 405, in check
    raise SystemCheckError(msg)
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
tithe.tithe.memberid: (fields.E300) Field defines a relation with model 'memberid', which is either not installed, or is abstract.
tithe.tithe.memberid: (fields.E307) The field tithe.tithe.memberid was declared with a lazy reference to 'tithe.memberid', but app 'tithe' doesn't provide model 'memberid'.
tithe.tithe: (models.E012) 'unique_together' refers to the non-existent field 'IntegerField'.

System check identified 3 issues (0 silenced).
Performing system checks...

Unhandled exception in thread started by <function wrapper at 0x7f3d3ccdc9b0>
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
    self.check(display_num_errors=True)
  File "/usr/lib64/python2.7/site-packages/django/core/management/base.py", line 405, in check
    raise SystemCheckError(msg)
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
tithe.tithe.memberid: (fields.E300) Field defines a relation with model 'User', which is either not installed, or is abstract.
tithe.tithe.memberid: (fields.E307) The field tithe.tithe.memberid was declared with a lazy reference to 'tithe.user', but app 'tithe' doesn't provide model 'user'.
tithe.tithe: (models.E012) 'unique_together' refers to the non-existent field 'IntegerField'.

这是我的 model.py 代码

from django.utils import timezone
from django.db import models

# Create your models here.
class tithe(models.Model):
    memberid = models.ForeignKey('User')
    membername = models.CharField(max_length=45)
    receitcode = models.CharField(max_length=45)
    tithes = models.IntegerField()
    combinedoffering = models.IntegerField()
    campmeetingoffering = models.IntegerField()
    churchbuilding = models.IntegerField()
    conference = models.IntegerField()
    localchurch = models.IntegerField()
    funds = models.IntegerField()
    total = models.IntegerField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.receitcode

    class Meta:
        unique_together = ["receitcode","IntegerField"]
        ordering = ["published_date","membername"]

【问题讨论】:

    标签: django sqlite django-models fedora-25


    【解决方案1】:

    下面一行

    memberid = models.ForeignKey('User')
    

    导致问题。您必须将用户对象传递给它。

    导入User 模型。

    from django.contrib.auth.models import User
    

    然后

    memberid = models.ForeignKey(User)
    

    【讨论】:

    • 我可以换成memberid - models.ForeignKey('memberid.User')
    • memberid.User 不起作用。 memberid 没有任何名为 User 的属性。默认用户模型将在这里工作。您也不必将其作为字符串传递。
    【解决方案2】:

    前两个警告是因为 Django 找不到您在 memberid 外键中引用的模型 'User'

    我建议您使用settings.AUTH_USER_MODEL 来引用用户模型。无论您是否有自定义用户模型,这都将起作用。

    memberid = models.ForeignKey(settings.AUTH_USER_MODEL)
    

    有关referencing the user model 的更多信息,请参阅文档。

    请注意,最好将您的字段命名为member。这样,相关实例将为member,相关ID 为member_id。目前关联实例为memberid,关联id为memberid_id

    最后的警告是因为模型中没有IntegerField 字段。如果您希望 receitcode 字段本身是唯一的,则删除 unique_together 行并将字段更改为:

    receitcode = models.CharField(max_length=45, unique=True)
    

    【讨论】:

    • 因为我希望收据有一个唯一的代码,所以我选择它是unique_together = ["receipt_code"]
    • 我已将memberid 更改为member_idmembernamemember我认为这现在有意义
    • 您不需要unique_together 来使单个字段唯一。只需在字段中使用unique 选项即可。
    • 你误解了我关于外键的观点。外键不应包含id。请参阅文档中有关 [数据库表示](docs.djangoproject.com/en/1.11/ref/models/fields/#database-representation)的注释
    • 这就是我无法迁移的原因。No changes detected in app 'tithe'
    【解决方案3】:

    您的 ForeignKey 需要引用具体模型或抽象模型。由于您使用字符串进行引用(这意味着模型是抽象的),您需要通过声明 abstract = True 将类 Meta: 声明为抽象

    当模型被子类化为具体模型并且与抽象模型的 app_label 无关时,抽象模型上以这种方式定义的关系得到解决:

    以下信息来自 Django 文档https://docs.djangoproject.com/en/1.11/ref/models/fields/

     products/models.py
    from django.db import models
    
    class AbstractCar(models.Model):
    manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE)
    
    # This is what you need to add
    class Meta:
        abstract = True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2021-01-13
      • 2022-08-21
      相关资源
      最近更新 更多