2017-09-21 70 views
0

Auth用戶我使用Django 1.11外鍵默認爲在Django

我有一個商業模式。

class Business(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    name = models.CharField(max_length=200) 
    business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE) 

    class Meta: 
     verbose_name = 'business' 
     verbose_name_plural = 'businesses' 
     db_table = 'businesses' 

    def __str__(self): 
     return self.name 

當我運行python3 manage.py makemigration business它給

You are trying to add a non-nullable field 'user' to business without a default; 

我想將該字段設置爲使用登錄的用戶ID作爲默認的外鍵。

如何使用Auth用戶ID作爲用戶特定數據記錄的默認值?

編輯2

業務創建視圖views.py

class BusinessCreate(CreateView): 
    model = Business 
    fields = ['name', 'business_type'] 

    def get_context_data(self, **kwargs): 
     data = super(
      BusinessCreate, 
      self 
     ).get_context_data(**kwargs) 

     if self.request.POST: 
      data['business_address'] = BusinessAddressFormSet(self.request.POST) 
     else: 
      data['business_address'] = BusinessAddressFormSet() 
     return data 

    def form_valid(self, form): 
     context = self.get_context_data() 
     business_address = context['business_address'] 
     with transaction.atomic(): 
      self.object = form.save() 

      if business_address.is_valid(): 
       business_address.instance = self.object 
       business_address.save() 

     return super(BusinessCreate, self).form_valid(form) 

    def get_success_url(self): 
     messages.success(self.request, 'Business Added Successfully') 
     return reverse('business:list') 

回答

2

你需要怎麼把那場non nullable在ForeignKey的情況下提供的默認用戶。

user = models.ForeignKey(User, on_delete=models.CASCADE, default=1) 

更新評論

def form_valid(self, form): 
    form.instance.user = self.request.user 
    return super(BusinessCreate, self).form_valid(form) 
+1

如果pk = 1的用戶不存在? –

+0

我想將默認設置爲登錄的用戶標識 –

+0

您不能這樣做,因爲您需要可以在模型中訪問的請求變量。 –

1

之後有沒有辦法做到這一點。當前用戶只有在http請求的情況下才有意義。遷移不能依賴於上下文。您必須在視圖函數中創建新的Business實例時明確傳遞當前用戶。

+0

我更新了創建視圖的問題。如何明確傳遞? –

+0

您可以覆蓋'form_valid'並將當前用戶添加到表單中。 https://stackoverflow.com/a/34239078/1977847 –