Модель Django, определяющая список полей URLField - PullRequest
1 голос
/ 11 октября 2010

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

Я хочу, чтобы у него было переменное количество URL-адресов, однако, похоже, что у Django есть только OneToManyField, для которого требуется модель (а не поле - какой URLField является).

1 Ответ

1 голос
/ 11 октября 2010

При проектировании реляционной базы данных поля в таблице всегда являются скалярными значениями. в вашем случае такое поле будет "url". То, как вы получаете коллекцию для применения к строке, вы соединяете эту строку со строками другой таблицы. На языке django это означало бы, что вам нужны две модели, одна для объектов Post, а другая, которая связывает несколько ссылок с этим постом.

class Post(models.Model):
    pass

class Url(models.Model):
    url = models.URLField()
    post = models.ForeignKey(Post)


myPost = Post.objects.all().get()
for url in myPost.url_set.all():
    doSomething(url.url)

Теперь вы можете получить доступ к URL через urls member

Но если вы хотите, чтобы на странице администратора Post также можно было добавлять URL-адреса, вам нужно проделать некоторые трюки с InlineModelAdmin .

from django.db import models
from django.contrib import admin


class Post(models.Model):
    pass

class Url(models.Model):
    url = models.URLField()
    post = models.ForeignKey(Post)


class UrlAdmin(admin.TabularInline):
    model = Url

class PostAdmin(admin.ModelAdmin):
    inlines = [UrlAdmin]

admin.site.register(Post, PostAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...