2012-12-28 3 views
6

tôi đã có hai loại cổ phiếu này:OneToOneField với null = True không cho phép trường trống

class Bill(models.Model): 
    date = models.DateField() 
    total_amount_chf = models.DecimalField('Cost (in CHF)', max_digits=10, decimal_places=2) 

class ProjectParticipation(models.Model): 
    project = models.ForeignKey('Project') 
    user = models.ForeignKey(User) 
    is_admin = models.BooleanField() 
    bill = models.OneToOneField(Bill, on_delete=models.SET_NULL, null=True, blank=True) 

Khi tôi bây giờ đang xây dựng cơ sở dữ liệu SQL-tôi nhận lĩnh vực sau đây trong bảng cho ProjectParticipation :

bill_id integer NOT NULL, 
CONSTRAINT expenses_projectparticipation_bill_id_fkey FOREIGN KEY (bill_id) 
    REFERENCES expenses_bill (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED, 

Và bây giờ khi tôi muốn chèn ProjectParticipation mà không có Bill, tôi nhận được "giá trị null trong cột" bill_id "vi phạm ràng buộc không null".

Làm gì để chống lại nó?

+0

Lớp 'Bill' phải ở trước lớp' ProjectParticipation' –

+0

Thực ra là trước đây, dán nó ở đây một cách sai lầm. Tôi sẽ thay đổi điều đó. – melbic

+0

Có thể bạn đã thêm Null Constraint sau khi đồng bộ hóa db. Xóa cơ sở dữ liệu và đồng bộ hóa lại db (nếu bạn không sử dụng South nếu không chắc chắn rằng bạn đã di chuyển các thay đổi lược đồ). –

Trả lời

6

Có thể bạn đã thêm Null Constraint sau này sau khi đồng bộ hóa cơ sở dữ liệu. Xóa cơ sở dữ liệu và đồng bộ hóa lại cơ sở dữ liệu (nếu bạn không sử dụng Django-South nếu không hãy đảm bảo bạn đã di chuyển các thay đổi lược đồ)