2010-10-14 29 views

Trả lời

4

Bạn có thể sử dụng giao diện quản trị, từ vỏ, hoặc kịch bản nó (nếu bạn đang tìm kiếm một giải pháp tự động). Dưới đây là làm thế nào để làm điều đó từ vỏ (và những gì bạn sẽ đưa vào kịch bản):

[[email protected] projects]$ python manage.py shell 
>>> from django.contrib.sites.models import Site 
>>> newsite = Site(name="Test",domain="test.com") 
>>> newsite.save() 
+2

sự hiểu biết của tôi là đồ đạc là cách ưa thích để làm điều này. Xem câu trả lời của @ Askell dưới đây. – Josh

5

Nếu bạn muốn làm điều này tự động, hãy thử này

from django.contrib import sites 
from django.db.models import signals 
from django.conf import settings 

def create_site(app, created_models, verbosity, **kwargs): 
    """ 
    Create the default site when when we install the sites framework 
    """ 
    if sites.models.Site in created_models: 
     sites.models.Site.objects.all().delete() 

     site = sites.models.Site() 
     site.pk = getattr(settings, 'SITE_ID', 1) 
     site.name = getattr(settings, 'SITE_NAME', 'Example') 
     site.domain = getattr(settings, 'SITE_DOMAIN', 'example.com') 
     site.save() 

signals.post_syncdb.connect(create_site, sender=sites.models) 

Đó là mã cần phải được chạy bất cứ khi nào một lệnh quản lý được thực hiện. Vì vậy, bạn có thể đặt nó trong management/__init__.py cho bất kỳ ứng dụng nào. Sau đó, chỉ cần thêm SITE_ID, SITE_NAMESITE_DOMAIN vào số settings.py của bạn.

35

Giải pháp đơn giản là tạo lịch thi đấu initial_data.json cho ứng dụng Sites sẽ ghi đè mặc định.

Ví dụ, vật cố của tôi tại /myproject/myapp/fixtures/initial_data.json:

[ 
    { 
    "model": "sites.site", 
    "pk": 1, 
    "fields": { 
     "domain": "myproject.mydomain.com", 
     "name": "My Project" 
    } 
    } 
] 

Một lưu ý nhỏ: Vì đây là dữ liệu chung cho toàn bộ dự án, nó có thể là một ý tưởng tốt để lưu trữ fixture to/myproject/fixtures/hoặc một ứng dụng/myproject/commons/(như tôi) thay vì lưu trữ nó với chỉ một số ứng dụng. Điều này giúp dữ liệu dễ tìm và giúp các ứng dụng trở nên tái sử dụng được nhiều hơn một chút.

Lưu ý thứ hai: Django cho phép sử dụng nhiều đồ đạc initial_data.json trong nhiều ứng dụng (Sử dụng bộ hỗn hợp các đồ đạc initial_data.json và initial_data.yaml không hoạt động như mong đợi: P). Tất cả chúng sẽ được tự động sử dụng để điền trước cơ sở dữ liệu khi syncdb được chạy.

Một số tài liệu tham khảo:

Các vấn đề liên quan