Метка времени много2маны? - PullRequest
1 голос
/ 17 октября 2011

У меня есть следующая аннотация:

class A:
    clientname ...
    logs = models.ManyToManyField(B, blank=True, null=True)

class B.
    message ...
    timestamp =  models.DateTimeField()

    def save(self, *args, **kwargs):
        self.timestamp = datetime.now()
        super(B, self).save(*args, **kwargs)

Теперь, если сообщение сохранено, я хочу, чтобы оно всегда имело отметку времени. И я не хочу менять отношения многих людей. Это возможно? И если это так, как бы мне написать?

UPDATE:

мой взгляд

def log(request):
    if request.method == 'POST':
        log, created = B.objects.get_or_create(message=request.POST['message'])
        client = \
            A.objects.get(clientname=request.POST['clientname'])
        client.logs.add(log)
        return HttpResponse(content="OK", mimetype="text/plain", status=200)
    else:
        return HttpResponse(content="Failed", mimetype="text/plain", status=400)

RESOLUTON: Я сделал это, это своего рода обходной путь:

def log(request):
    if request.method == 'POST':
        time = datetime.now()
        log, created = \
            Log.objects.get_or_create(message=request.POST['message'], \
            timestamp=time)
        client = \
            Thinclient.objects.get(hostname=request.POST['clientname'])
        client.logs.add(log)
        return HttpResponse(content="OK", mimetype="text/plain", status=200)
    else:
        return HttpResponse(content="Failed", mimetype="text/plain", status=400)

ОБНОВЛЕНИЕ:

Нет, на самом деле это не то, что я хотел, потому что это создаст новые экземпляры сообщения, даже если сообщение будет таким же

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Вы можете использовать DateTimeField с аргументом auto_now:

timestamp = DateTimeField(auto_now=True)

Подробнее об этом: https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.DateField.auto_now

0 голосов
/ 17 октября 2011

добавить save () к классу B

def save(self, *args, **kwargs):
    self.timestamp = datetime.now()
    super(B, self).save(*args, **kwargs)
...