2016-06-16 4 views
0

Ich möchte ein Objekt eines Modells mit update_or_create-Methode aktualisieren. Aber wenn ich das benutze, wird ein anderes Objekt erstellt. Mein models.py:So aktualisieren Sie ein Objekt des Modells in Django mit update_or_create

class SubmitHobby(models.Model): 
    M_id=models.IntegerField(default=0) 
    name=models.CharField(max_length=255) 
    mob=models.IntegerField(default=0,blank=True,null=True) 
    is_approve=models.BooleanField(default=False) 

Ich möchte is_approve Feld auf der Basis von M_id (M_id = 234) aktualisieren.

def approve(request): 

    context = RequestContext(request) 
    name= = request.GET.get('name') 
    mid=request.GET.get('M_Id') 

    obj=SubmitHobby.objects.update_or_create(M_id=mid) 
    obj.is_approve=True 
    obj.save() 
+0

das hat mir nicht geholfen – vikrantCool

+0

Ihre ** update_or_create ** -Methode erstellt eine SubmitHobby-Instanz, weil sie nicht existiert. Sind Ihre M_ids einzigartig? –

+0

ja M_ids sind eindeutig – vikrantCool

Antwort

1

Sie müssen nur das gewünschte Objekt abrufen, den Wert festlegen, den Sie ändern und speichern müssen, das Objekt wird aktualisiert.

obj = modelname.objects.get(pk=<id>) 
obj.field=<value> 
obj.save() 
+0

thanks.it funktioniert – vikrantCool

0

Ihr Modell gesetzt keinen Primärschlüssel so Django für Sie setzt. Daher können Sie mehrere Objekte mit demselben M_id haben. Wenn Sie einzigartige M_id haben wollen, empfehle ich Ihnen Ihr Modell zu aktualisieren, um:

class SubmitHobby(models.Model): 
    M_id=models.IntegerField(primary_key=True) 
    name=models.CharField(max_length=255) 
    mob=models.IntegerField(default=0,blank=True,null=True) 
    is_approve=models.BooleanField(default=False) 
3

update_or_create ein Paar (model_instance, bool) zurückgibt. Darüber hinaus müssen Sie die Felder schaffen, die bestehenden Datensätze als **kwargs identifizieren sollten und die Werte, die Sie als dict-defaults aktualisieren möchten:

obj, created = SubmitHobby.objects.update_or_create(
    defaults={'is_approve': True}, 
    M_id=mid 
) 

Ohne defaults, könnte man genauso gut gehen mit guten alten get_or_create.

Verwandte Themen