2017-08-11 14 views
1

私のmodel.py .iで何が問題を引き起こす可能性があります何も試したことがありませんでした。私は私の外部キーを正しい方法を定義したと思う。私は私のforeginkeyでmemberid.userを使用する必要がありますか、またはeffect.anyの貢献は歓迎されるでしょう。3つの問題(0沈黙)

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"] 

答えて

1

ですDjangoはあなたが参照モデル'User'を見つけることができないので、最初の2つの警告がありますmemberid外部キー。

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) 
+0

私は領収書に固有のコードを持たせたいから 'unique_together = [" receipt_code "]' – harri

+0

'memberid'を' member_id'に、 'membername'を' member'に変更しました。これはmakeと思っていますsense now – harri

+0

単一のフィールドをユニークにするために 'unique_together'は必要ありません。フィールド上で 'unique'オプションを使用するだけです。 – Alasdair

1

memberid = models.ForeignKey('User') 

下の行は、問題を引き起こしています。 Userオブジェクトを渡す必要があります。

インポートUserモデルです。

from django.contrib.auth.models import User 

その後、

memberid = models.ForeignKey(User) 
+0

を私はMEMBERID 'に変更することができます - models.ForeignKey(「memberid.User」)' – harri

+0

MEMBERID。ユーザーは動作しません。 memberidにはUserという名前の属性はありません。既定のユーザーモデルがここで動作します。また、文字列として渡す必要はありません。 –

0

あなたのForeignKeyは、具体的なモデルや抽象モデルを参照する必要があります。文字列(モデルが抽象であることを意味している)を参照しているので、抽象的な= 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 
関連する問題