2016-03-14 24 views
1

我讀過很多問題,其中包括herehere,但沒有答案。這裏是我的2款有問題的:總是問:「以下內容類型陳舊,需要刪除」!

# coding=UTF-8 

from django.db import models 
from django.utils.encoding import python_2_unicode_compatible 
from django.utils.translation import ugettext_lazy as _ 

from app.models.generic import BaseModel 
from app.models.personne import Personne 


@python_2_unicode_compatible 
class Message(BaseModel): 
    src = models.ForeignKey('Personne', related_name='message_src') 
    dst = models.ForeignKey('Personne', related_name='message_dst') 
    is_read = models.BooleanField(default=False) 
    message = models.TextField(null=True, blank=True, 
           verbose_name=_(u'Messages')) 
    def __str__(self): 
     return u'{} : {} <> {} ({}) : "{}"'.format(
      self.date_creation.strftime('%Y-%m-%d %H:%M:%S'), 
      self.src.full_name(), self.dst.full_name(), 
      _(u'read') if self.is_read else _(u'unread'), 
      self.message_summary() 
     ).strip() 

    class Meta: 
     ordering = ["date_creation"] 


@python_2_unicode_compatible 
class Conversation(BaseModel): 

    personnes = models.ManyToManyField(Personne, related_name='conversations') 
    messages = models.ManyToManyField(Message, related_name='conversations') 

    order_with_respect_to = 'messages' 

    def __str__(self): 
     return _(u'Conversation n.{}').format(self.pk).strip() 

每次我做一個migrate我不斷收到這個問題,,我總是回答yes

The following content types are stale and need to be deleted: 

    app | conversation_personnes 
    app | conversation_messages 

Any objects related to these content types by a foreign key will also 
be deleted. Are you sure you want to delete these content types? 
If you're unsure, answer 'no'. 

    Type 'yes' to continue, or 'no' to cancel: yes 

Process finished with exit code 0 

這不是可能重複this question

這裏是我的django_content_type表的快照,有沒有模型像conversation_personnesconversation_messages

django content type table

因此,如果我嘗試:

>>> from django.contrib.contenttypes.models import ContentType 
ct = ContentType.objects.get(app_label='app', model='conversation_personnes') 
ct.delete() 

Traceback (most recent call last): 
    File "<input>", line 2, in <module> 
    File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 127, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\django\db\models\query.py", line 334, in get 
    self.model._meta.object_name 
DoesNotExist: ContentType matching query does not exist. 

在我的整個唯一的地方代碼,我找到conversation_personnes是一個遷移文件,其中包含:

File 0060_messagethrough.py 

class Migration(migrations.Migration): 

    dependencies = [ 
     ('app', '0059_auto_20160226_1752'), 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='MessageThrough', 
      fields=[ 
      ], 
      options={ 
       'proxy': True, 
      }, 
      bases=('app.conversation_messages',), 
     ), 
    ] 

...和

File 0058_auto_20160225_0106.py 

class Migration(migrations.Migration): 

    dependencies = [ 
     ('app', '0057_conversation_personnes'), 
    ] 

    operations = [ 
     migrations.RemoveField(
      model_name='message', 
      name='conversation', 
     ), 
     migrations.AddField(
      model_name='conversation', 
      name='messages', 
      field=models.ManyToManyField(to='app.Message'), 
     ), 
    ] 

我缺少什麼?

+0

你有沒有試過這個:http://stackoverflow.com/questions/5510843/django-syncdb-incorrectly-warns-that-many-to-many-field-is-stale – ilse2005

+1

**這不是重複的,我更新了我的問題** –

+0

我已經更新了我的問題,非常精確,所以人們可能有所有的線索要回答。 –

回答

0

問題來自我的admin.py我創建一個代理類:這兩個代理在這裏,所以我可以更改管理面板中的標籤。因此,這是最終的代碼=我的問題的答案,但我必須刪除我的代理類,所以我不能更改管理員中的標籤...如果任何人有工作的想法我是你的男人!

# class MessageThrough(Conversation.messages.through): 
#  class Meta: 
#   proxy = True 
# 
#  def __unicode__(self): 
#   return str(self.message) 


class ConversationMessagesInline(CollapsedStackedInline): 
    # model = MessageThrough 
    model = Conversation.messages.through 
    fields = ('message',) 
    raw_id_fields = ('message',) 
    extra = 0 

    verbose_name = u"Message" 
    verbose_name_plural = u"Messages" 


# class PersonneThrough(Conversation.personnes.through): 
#  class Meta: 
#   proxy = True 
# 
#  def __unicode__(self): 
#   return self.personne.full_name() 


class ConversationPersonnesInline(CollapsedStackedInline): 
    # model = PersonneThrough 
    model = Conversation.personnes.through 
    fields = ('personne',) 
    raw_id_fields = ('personne',) 
    extra = 0 

    verbose_name = u"Personne" 
    verbose_name_plural = u"Personnes" 
0

它有點晚了回答,但是我剛剛發現這一點,運行到同一個問題的人。

我發現this,溶液1號,工作對我來說:

class MyInline(admin.TabularInline): 
    MyModel.m2m.through.__unicode__ = lambda x: 'My New Str' 
    model = MyModel.m2m.through 

記住更改 '的unicode' 到 'STR' 如果你正在使用Python 3+。