2013-03-10 61 views
0

我正在使用Django構建一個小系統來控制學生咖啡館借給學生的借貸。 我無法在表單提交後識別對象,我想將對象標記爲'unaivalable'(可用指令可用,因此我想將其設置爲False),因此下次有人來請求該對象時,它不會以'貸款'的形式出現。識別和修改Django模型中的單個字段

所有我需要的是如何實現它的提示,我一直在通過Django文檔和此站點,但沒有成功。提前致謝提示!

models.py

class Mate(models.Model): 
color = models.CharField(max_length=2, 
    choices=COLOR_CHOICES, default=u'RO') 
disponible = models.BooleanField(default=True) 

def __unicode__(self): 
    return self.color 


class Prestamo(models.Model): 
cliente = models.ForeignKey(Usuario, null=False, blank=False) 
mate = models.ForeignKey(Mate, null=False, blank=False) 
termo = models.ForeignKey(Termo, null=False, blank=False) 
bombilla = models.ForeignKey(Bombilla, null=False, blank=False) 
fecha = models.DateTimeField(null=False, blank=False) 
devuelto = models.BooleanField(default=False) 
fecha_devolucion = models.DateTimeField(null=True, blank=True) 

def __unicode__(self): 
    return str(self.pk) 

views.py

@login_required 
# Add_prestamo means 'Add lending' this basically deals with prestamo model, but i want to alter 'mate' objects here too. 
def add_prestamo(request): 
if request.method == 'POST': 
    form = PrestamoForm(request.POST, 
      auto_id=False, error_class=DivErrorList) 

    if form.is_valid(): 
     prestamo = form.save(commit=False) 

     if request.POST.get('usuarios'): 
      miuser = request.POST.get('usuarios', '') 
     else: 
      miuser = '' 
     prestamo.cliente = Usuario.objects.get(nombre__exact=miuser) 

     # I KINDA NEED SOMETHING RIGHT HERE 

     prestamo.fecha = timezone.now() 
     prestamo.devuelto = False 
     prestamo.save() 
     return HttpResponseRedirect(reverse('list-prestamos')) 
else: 
    form = PrestamoForm() 
return TemplateResponse(request, 
     'gester/add_prestamo.html', {'form': form, }) 

add_prestamo.html

<form action="" method="post"> 
    {% csrf_token %} 
     <table> 
      <tr> 
      <td> 
       <div class="ui-widget"> 
        <label for="usuarios">Usuario: </label></td><td> 
        <input id="usuarios" name="usuarios"> 
       </div> 
       </td> 
      </tr> 
      {{ form.as_table }} 
     </table> 
    <input class="btn" type="submit" value="Crear" /> 
</form> 

在模板中,我使用{{form.as_table}}顯示錶單,它顯示一個選擇,但其中很多(配合)具有相同的顏色,因此當我通過POST查看時,如何識別確切對象來改變'disponible'字段值?

+0

Mate是否有主鍵?如果是這樣,您可以使用它來更新配對模型。有點像:'Mate.objects.filter(pk = request.POST.get('mate'))。update(disponible = False)' – 2013-03-10 21:46:17

+0

PrestamoForm是模型還是表單? – 2013-03-10 23:29:24

+0

這是一個PrestamoForm JackShedd 謝謝@BrandonBertelsen,我在發表這篇文章並同時閱讀一本書的時候旅行了一段時間,我想出了一個類似於凱瑟琳的解決方案,雖然我正在尋找更像你的東西(無法做到它工作,因爲我從來沒有意識到我可以混合POST字符串與pk)。 – 2013-03-11 04:24:26

回答

1

我真的不明白你的代碼,但因爲你提到disponible,我希望這是你的意思。

prestamo.fecha = timezone.now() 
prestamo.devuelto = False 

//Because Prestamo model has a foreignkey for Mate model. 
//The Mate model contains the disponible field which you want to access 
//  (to set it to False or unavailable)? 
//This is how to access and update it. 
prestamo.mate.disponible = False 
prestamo.mate.save() 

prestamo.save() 
+0

非常感謝凱瑟琳。如果你的意思是你無法理解,因爲它是西班牙語,那是因爲我開始用英語編碼所有東西,然後我很難找到好的翻譯區域的東西(這種東西是系統的主要部分,例如MATE,這是一種區域飲料)。 我想出了你自己發佈的內容,但是當我回到家中閱讀你的答案時,我很高興有人幫我解決這樣一個簡單的問題。非常感謝! – 2013-03-11 04:30:29

+0

只要我能解決它,如果我有空閒時間,我會回答任何問題:) – catherine 2013-03-11 04:50:00