2010-03-24 83 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在这里很有帮助。