2017-10-27 24 views
0

create属性で属性を設定してオブジェクトを作成したい。 これは私のプロファイルモデルです:1対1の属性を持つオブジェクトを作成するdjango

class Profile(models.Model): 
    user = models.OneToOneField(User, 
     on_delete=models.CASCADE,related_name='profile') 
    employees = models.ManyToManyField(User, blank=True, null=True, 
     related_name='boss') 
    FatherName = models.CharField(max_length=20,default='',blank=True) 
    NationalCode = models.CharField(max_length=20, default='') 
    birth_date = jmodels.jDateField(null=True, blank=True) 
    PhoneNumber = models.CharField(max_length=20,default='',unique=True) 

と私は、オブジェクトを作成するときに

emp = User.objects.create(first_name=FirstName, last_name=LastName, 
    username=phonenumber,user__PhoneNumber=phonenumber) 

エラーは、この機能のために無効なキーワード引数です。 ユーザモデルを作成しようとすると、プロファイルモデルでPhoneNumberの値を設定するにはどうすればよいですか?
タンクすべて

+1

ここで 'user__PhoneNumber'を使用することはできません。そしてそれはまったく意味がありません。 – cezar

+3

また、命名規則に従わず、Zen of Pythonを尊敬していません。クラス属性にPascalCaseを使用するのは死の罪です。矛盾し、異なるケースを混ぜることは、地獄への道です。 – cezar

答えて

2

2つのインスタンスを作成するため、2つの手順で行う必要があります。ユーザーインスタンスは、ForeignKeyによって参照される前に存在する必要があります。 Sth。これらの線に沿って動作します:

user = User.objects.create(first_name=FirstName, last_name=LastName, username=phonenumber) 
profile = Profile.objects.create(user=user, PhoneNumber=phonenumber) 
+0

tanksしかしPhoneNumberがプ​​ロファイルモデルで一意であるのは、PhoneNumberが重複している場合にユーザーオブジェクトを最初に作成したときにユーザーオブジェクトが作成されたため、これを削除する必要があります。 – Amir

1

あなたは暗黙的にProfileオブジェクトの作成を処理するためのDjangoの信号を使用することができます。

@receiver(post_save, sender=settings.AUTH_USER_MODEL) 
def create_profile(sender, instance=None, created=False, **kwargs): 
    """ 
    Create profile whenever a user is created. 
    """ 
    if created: 
     Profile.objects.create(user=instance) 
関連する問題