Автозаполнение полиморфной таблицы при сохранении или при удалении в Django - PullRequest
1 голос
/ 25 декабря 2010

Я работаю над проектом, в котором я сделал «ядро» приложения, оно будет содержать некоторые из повторно используемых моделей в моих проектах, большинство из которых являются полиморфными моделями (типами общего содержимого) и будут связаны с различными моделями.

Пример ниже, я пытаюсь создать модель аудита и будет связан с несколькими моделями, которые могут потребовать аудита.

Это опросы / models.py

from django.db import models
from django.contrib.auth.models import User
from core.models import *
from django.contrib.contenttypes import generic

class Poll(models.Model):
    ## TODO: Document
    question = models.CharField(max_length=300)
    question_slug=models.SlugField(editable=False)
    start_poll_at = models.DateTimeField(null=True)
    end_poll_at = models.DateTimeField(null=True)
    is_active = models.BooleanField(default=True)
    audit_obj=generic.GenericRelation(Audit)
    def __unicode__(self):
        return self.question


class Choice(models.Model):
    ## TODO: Document
    choice = models.CharField(max_length=200)
    poll=models.ForeignKey(Poll)
    audit_obj=generic.GenericRelation(Audit)

class Vote(models.Model):
    ## TODO: Document
    choice=models.ForeignKey(Choice)
    Ip_Address=models.IPAddressField(editable=False)
    vote_at=models.DateTimeField("Vote at", editable=False)

вот ядро ​​/ modes.py

from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic


class Audit(models.Model):
    ## TODO: Document
    # Polymorphic model using generic relation through DJANGO content type
    created_at = models.DateTimeField("Created at", auto_now_add=True)
    created_by = models.ForeignKey(User, db_column="created_by", related_name="%(app_label)s_%(class)s_y+")
    updated_at = models.DateTimeField("Updated at", auto_now=True)
    updated_by = models.ForeignKey(User, db_column="updated_by", null=True, blank=True,
                                   related_name="%(app_label)s_%(class)s_y+")
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField(unique=True)
    content_object = generic.GenericForeignKey('content_type', 'object_id')

а вот и опросы / admin.py

from django.core.context_processors import request
from polls.models import Poll, Choice
from core.models import *
from django.contrib import admin

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3

class PollAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]

admin.site.register(Poll, PollAdmin)

Я новичок в django, что я здесь пытаюсь сделать, вставить запись в аудит при вставке записи в опросы и затем обновить эту же запись при обновлении записи в опросах.

1 Ответ

1 голос
/ 25 декабря 2010

Вы можете переопределить метод save() модели Poll или использовать Сигналы Джанго

чтобы сделать это.

попробуйте что-то вроде:

def save(self, *args, **kwargs,request):    
     super(ModelName, self).save(*args, **kwargs)
     ## followed by your code

Вы можете сохранить экземпляр модели, используя

modelinstance.save(request)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...