2013-01-24 19 views
6

Mam podklasę models.Model reprezentującą widok na mojej bazy danych mysql (tj. Managed = False).django zapobiec usuwaniu instancji modelu

Jednak podczas uruchamiania moich testów jednostkowych, otrzymuję:

DatabaseError: (1288, 'The target table my_view_table of the DELETE is not updatable')

Źródłem tego wniosku delecji (pośrednio) za pomocą klucza obcego. Mam (uproszczony):

class MyViewModel(models.Model): 
    problematic_field = models.ForeignKey(ActualTableModel) # specifying on_delete=models.SET_NULL simply replaces the DELETE error with an UPDATE one 

Podczas przerywaniem moich testów, jestem Usuwanie instancji ActualTableModel, i wydaje się, że Django jest następujący udokumentowanego zachowania:

When Django deletes an object, it emulates the behavior of the SQL constraint ON DELETE CASCADE -- in other words, any objects which had foreign keys pointing at the object to be deleted will be deleted along with it.

Wydaje się to być przyczyną problemy po zastosowaniu do widoku (managed = False).

próbowałem przesłanianie metody usuwania, aby zapobiec usuwaniu:

class MyViewModel(models.Model): 
    ... 
    def delete(self, *args, **kwargs): 
     pass # deletion of a view row is never valid 

ale to nie rozwiązuje problemu.

Jak mogę zapobiec temu zjawisku?

Odpowiedz

7

Może mógłbyś wypróbować jeden z różnych on_delete argument options?

Tj .:

problematic_field = models.ForeignKey(ActualTableModel, on_delete=models.PROTECT) 
+1

Dzięki za link dokumentacji. Próbowałem on_delete = models.SET_NULL, ale przeoczyłem DO_NOTHING. Ten drugi naprawia błąd. – sapi

Powiązane problemy