2013-07-23 28 views
10

tôi có mô hình sau đây trong Django 1.5:Mô hình Django trống = False không hoạt động?

class Person(models.Model): 
    name = models.CharField(max_length=50) 

Lưu ý rằng theo https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank là theo mặc định False có nghĩa là nó phải được xác định.

Tuy nhiên, tôi có thể tạo ra thành công một đối tượng Person như sau:

Person.objects.create() 

Thông báo tên không được chỉ định. Chuyện gì vậy?

Ok, câu trả lời từ các tài liệu là:

Lưu ý rằng đây là khác biệt so với null. null là hoàn toàn liên quan đến cơ sở dữ liệu, trong khi trống là liên quan đến xác thực. Nếu một trường trống = True, xác thực biểu mẫu sẽ cho phép nhập một giá trị trống. Nếu một trường trống = False, trường sẽ được yêu cầu.

Một bắt:

Lưu ý rằng xác nhận sẽ không được chạy tự động khi bạn lưu một mô hình, nhưng nếu bạn đang sử dụng một ModelForm, nó sẽ chạy xác nhận của bạn trên bất kỳ lĩnh vực được bao gồm trong của bạn hình thức.

Bạn có trách nhiệm gọi các phương thức sạch trước khi lưu nếu bạn không sử dụng biểu mẫu.

+0

Thứ nhất, whats up với điều này ' name = ... 'KHÔNG làm điều này. –

+0

ý của bạn là gì? – Lucas

+0

Tôi tin rằng Trò chơi đang đề cập đến thụt đầu dòng. Nó không được khuyến cáo thực hành mã hóa cho mỗi PEP-8. – bernie

Trả lời

9

blank chỉ áp dụng cho hình xác nhận lĩnh vực như trong admin, hình thức django vv
null mặt khác là một nullable cột mức cơ sở dữ liệu.

Đối với lý do tại sao kết quả trống trong một mặc định '', tôi đã thực sự chỉ là chấp nhận nó như là "đó là cách nó hoạt động", nhưng đây là nơi nó dường như là trong django.db.models.Field

def get_default(self): 
     """ 
     Returns the default value for this field. 
     """ 
     if self.has_default(): 
      if callable(self.default): 
       return self.default() 
      return force_unicode(self.default, strings_only=True) 
     if (not self.empty_strings_allowed or (self.null and 
        not connection.features.interprets_empty_strings_as_nulls)): 
      return None 
     return "" 
     #  ^this 
+0

Tôi chưa bao giờ biết điều đó. Đã học được điều gì đó mới mẻ. –

+0

@Yuji bạn nói đúng. Từ tài liệu: Lưu ý rằng điều này khác với null. null là hoàn toàn liên quan đến cơ sở dữ liệu, trong khi trống là liên quan đến xác thực. Nếu một trường có trống = Đúng, xác thực biểu mẫu sẽ cho phép nhập một giá trị rỗng. Nếu một trường trống = False, trường sẽ được yêu cầu. – Lucas

0

Django tạo người dùng của bạn bằng một chuỗi rỗng. Bạn thực sự có thể chạy Person.objects.all() và nó sẽ cung cấp cho bạn một danh sách, nếu bạn lưu nó vào một biến gọi là user_list và làm một cái gì đó như user_list[0], nó sẽ trả về một đối tượng người dùng với một chuỗi rỗng. Tôi không biết làm thế nào hoặc tại sao nó làm điều này.

Các vấn đề liên quan