gpt4 book ai didi

javascript - 在 Django 管理中选择带有单选按钮的项目

转载 作者:行者123 更新时间:2023-12-02 23:50:14 27 4
gpt4 key购买 nike

这是我的 models.py 的一部分:

class Person(models.Model):
birth_year = WideYear(null=True, blank=True)
birth_year_uncertain = models.BooleanField()
death_year = WideYear(null=True, blank=True)
death_year_uncertain = models.BooleanField()
flourit_year = WideYear(null=True, blank=True)
flourit_year_uncertain = models.BooleanField()
FLOURIT_CHOICES = (
(u'D', u'Birth and death dates'),
(u'F', u'Flourit date'),
)
use_flourit = models.CharField('Date(s) to use', max_length=2, choices=FLOURIT_CHOICES)
def __unicode__(self):
if self.personname_set.filter(default_name__exact=True):
name = z(self.personname_set.filter(default_name__exact=True)[0])
else:
name = u'[Unnamed person]'
if self.use_flourit == u'D':
dates = '%s - %s' % (z(self.birth_year), z(self.death_year))
else:
dates = 'fl. %s' % (z(self.flourit_year))
return '%s (%s)' % (name, dates)
class Meta:
ordering = ['ordering_string']

class PersonName(models.Model):
titles = models.CharField(max_length=65535, null=True, blank=True)
surname = models.CharField(max_length=255, null=True, blank=True)
first_name = models.CharField(max_length=255, null=True, blank=True)
middle_names = models.CharField(max_length=255, null=True, blank=True)
post_nominals = models.CharField(max_length=65535, null=True, blank=True)
default_name = models.BooleanField()
person = models.ForeignKey(Person, null=True, blank=True)
def __unicode__(self):
return '%s, %s %s' % (self.surname, self.first_name, self.middle_names)
class Meta:
unique_together = ("titles", "surname", "first_name", "middle_names", "post_nominals", "person")
unique_together = ("default_name", "person")
post_save.connect(post_save_person_and_person_name, sender=PersonName)

我希望 PersonName 可以作为 TabularInline 与管理员中的 Person 一起编辑。另外,我希望 PersonName 的 default_name 字段显示为单选按钮,这样每个人只有一个 PersonName 可以具有 default_name=True。

最后一部分是最困难的部分。在 Django 中,在表单中添加单选按钮界面相对容易。从本质上讲,拥有一个可以选择表单集中的一种表单的表单似乎要困难得多。

实现此目的的一种方法是将 JavaScript 添加到 Person 的 change_form.html 中,它使用正则表达式来匹配 default_name 的 <input> 元素,并确保选中其中一个元素会取消选中其余元素。但是,如果 Django 命名 HTML 表单字段的约定发生变化,这似乎可能会被破坏;另外,它只能解决使用支持 JavaScript 的浏览器的用户的问题。

如有更好的想法,我们深表感谢!

更新 2009 年 9 月 17 日

以下管理模板扩展(基于 thisthis )实现了上面的 JavaScript 建议,但欢迎更好的解决方案!

{% extends "admin/change_form.html" %}

{% block extrahead %}
<script src="/site_media/jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
// Replace default_name checkboxes with radio buttons.
$(".default_name input").each(function(){
var name = $(this).attr('name'); // grab name of original
var id = $(this).attr('id'); // grab id of original
if ($(this).attr('checked')) { // grab checked value of original
var checked = ' checked="checked"';
} else {
var checked = '';
}
/* create new visible input */
var html = '<input type="radio" name="'+name+'" id="'+id+'" value="True"'+checked+' />';
$(this).after(html).remove(); // add new, then remove original input
});
// Ensure only one default_name radio button can be checked at a time.
$(".default_name input").click(function(){
$(".default_name input").not(this).removeAttr("checked");
});
});
</script>
{% endblock %}

最佳答案

我认为您不会获得传统的仅 HTML 方法来执行您想要的操作。

不过,您不必在这里依赖正则表达式。不能在输入字段中添加类名以便 jquery...

我想这比我最初想象的要难(在这里回答): Define css class in django Forms

但这只是一个稍微好一点的解决方案。

关于javascript - 在 Django 管理中选择带有单选按钮的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com