3

私は django モデルを書いていますが、データベースに存在できるレコードの数を制限したいと思います。たとえば、私がラジオを持っていて、6 つの異なる構成可能なステーションを持つことができるとします。データベース内のステーションの数を制限する最良の方法は何ですか?

4

2 に答える 2

4

これを実装するには、saveメソッドをオーバーライドし、各ラジオに6つのステーションしかないことを確認します。7番目のステーションが追加されている場合は、適切なエラーメッセージを表示して保存を中止できます。

于 2012-09-03T08:39:20.263 に答える
0

In this case you can create one radio model with a single instance (singletone-like) and create 6 stations as one-to-one fields. Please see the possible decision.

The advantage is you can have random access to each station. There are no any more checkings.

class RadioHasNotStationError( Exception ):
    pass

class _Station( models.Model ): # private model, so, you can't use the class anywhere else
    # fields of station

class Radio( models.Model ):
    station1 = models.OneToOneField( _Station )
    station2 = models.OneToOneField( _Station )
    station3 = models.OneToOneField( _Station )
    station4 = models.OneToOneField( _Station )
    station5 = models.OneToOneField( _Station )
    station6 = models.OneToOneField( _Station )

    def set_station( self, num, val ):
        try:
            setattr( self, 'station{0}'.format( num ), val )
        except AttributeError:
            raise RadioHasNotStationError( "The radio has not station {0}".format( num ) )

    def get_station( self, num ):
        try:
            result = getattr( self, 'station{0}'.format( num ) )
        except AttributeError:
            raise RadioHasNotStationError( "The radio has not station {0}".format( num ) )
    ...
    @staticmethod
    def get_inst():
        try:
            result = Radio.objects.select_related().get( id = 1 )
        except Radio.DoesNotExist:
            result = Radio.create()
        return result 

radio = Radio.get_inst()
radio.station1 = new_station
# ...
radio.set_station( 5, new_station2 )
# ...
station4 = radio.get_station( 4 )
# ...
radio.save()
于 2012-09-04T10:03:32.520 に答える