2010-03-24 88 views
1

我有以下問題。變化狀態的對象

我有模式:

 
class Towar(models.Model): 
    nrSeryjny=models.CharField(max_length=100) 
    opis=models.CharField(max_length=255) 
    naStanie=models.NullBooleanField(null=True) 



    def __unicode__(self): 
    return "%s" % self.opis 

    def lowerName(self): 
    return self.__class__.__name__.lower() 

    def checkState(self): 
    return self.naStanie 

    def changeState(self,state): 
    self.naStanie=state 


    class Meta: 
    ordering=['nrSeryjny'] 
    app_label = 'baza' 
    permissions=(("view_towar","mozna miec podglad dla towar"),) 

和型號:

 
class Wypozyczenie(models.Model): 
    dataPobrania=models.DateField() 
    pracownik=models.ForeignKey(User,null=True) 
    kontrahent=models.ForeignKey(Kontrahenci,null=True) 
    towar=models.ForeignKey(Towar,null=True) 
    objects=WypozyczenieManager() 
    default_objects=models.Manager() 
    ZwrotyObjects=WypozyczenieZwrotyManager() 

    def lowerName(self): 
    return self.__class__.__name__.lower() 

    def __unicode__(self): 
    if self.towar == None: 
     return "Dla:%s -- Kto:%s -- Kiedy:%s -- Co:%s" % (self.kontrahent,self.pracownik,self.dataPobrania,"Brak") 
    else: 
     return "Dla:%s -- Kto:%s -- Kiedy:%s -- Co:%s" % (self.kontrahent,self.pracownik,self.dataPobrania,self.towar) 

    class Meta: 
    ordering=['dataPobrania'] 
    app_label = 'baza' 
    permissions=(("view_wypozyczenie","mozna miec podglad dla wypozyczenie"),) 

,並以增加車型:

 
def modelAdd(request,model,modelForm): 
    mod=model() 
    if request.user.has_perm('baza.add_%s' % mod.lowerName()): 
    if request.method=='POST': 
     form=modelForm(request.POST) 
     if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect('/'+ mod.lowerName() + '/') 
    else: 
     form=modelForm() 
    v=RequestContext(request,{'form':form}) 
    return render_to_response('add_form.html',v) 

和我whant做到這一點,當我添加Wypozyczenie和保存然後由Wypozyczenie存儲的Towar將他的na stanie從True改爲False

Greets

回答

0

你有什麼試過的?

你就不能把

myinstance = form.save() 
towar = myinstance.towar 
towar.naStanie = False 
toware.save() 

而不是你簡單的調用來form.save()在您的視圖。

0

如果你想永遠保持這兩個同步,你可以覆蓋Wypozyczenie的save()方法。

class Wypozyczenie(models.Model): 
    ... 

    def save(self): 
     self.towar.naStanie = False 
     self.towar.save() 

或者,您也可以重寫ModelForm的save()方法。

0

您可以使用發出的信號保存您的Wypozyczenie對象。這可能是一個有點「乾淨」不是覆蓋save(),特別是當它是有用的重新使用其他型號的功能:

@receiver(models.signals.post_save, sender=Wypozyczenie) 
def after_wypozyczenie_save(sender, instance, created, **kwargs): 
    # `instance` is your saved Wypozyczenie object, you can 
    # access all it's fields here: 
    instance.towar.naStanie = False 
    instance.towar.save() 

    # It's also possible to do different action on the first save 
    # and on subsequent updates: 
    # 
    # if created: 
    #  ... 
    # else: 
    #  ... 

other signals保存或刪除上之前發送。 Django documentation on signals在這裏很有幫助。