2013-07-02 3 views
1

Предположим, у меня есть простой OneToOneField настроить:Как установить OneToOneField на пустой/пустой/пустой?

class MyRelatedModel(models.Model): 
    pass 

class MyModel(models.Model): 
    my_field = OneToOneField(MyRelatedModel, blank=True, null=True) 

>>> my_related_instance = MyRelatedModel() 
>>> my_related_instance.save() 

>>> my_model_instance = MyModel(my_field=my_related_instance) 
>>> my_model_instance.save() 

Это означает, что я могу получить доступ к my_related_instance через my_model_instance.my_field. Однако, я хочу, чтобы разорвать эту связь:

>>> my_model_instance.my_field = None 
AttributeError: 'NoneType' object has no attribute 'myrelatedmodel_id' 

>>> setattr(my_model_instance, 'my_field', None) 
AttributeError: 'NoneType' object has no attribute 'myrelatedmodel_id' 

Я знаю, что я мог удалить связанный my_related_instance, но в данном случае я просто хочу, чтобы разорвать связь. Как вы можете видеть, и blank, и null установлены на True.

Как установить OneToOneField на пустое/пустое/пустое?

Для справки, я использую django 1.4.

+0

логика просто звучит неправильно. было бы интересно услышать некоторые подробности о том, что вы собираетесь выполнить. возможно, есть лучшее решение – Alp

+0

Это может показаться неправильным, но я не понимаю, как можно установить отношения «один-к-одному», но не отменять. – NT3RP

ответ

0

Когда вы создаете свои модели, вы можете попросить django не строить обратное отношение.

class MyModel(models.Model): 
    my_field = models.ForeignKey(MyRelatedModel, related_name='+') 
Смежные вопросы